私は現在、Learn you a Haskellの第8章にいますが、型クラスのセクションに到達しました。上記のセクションで、作成者は、さまざまな型をクラスのインスタンスにする方法の例を示します(たとえば、カスタム型など)。これを見て、私は(楽しみと練習のために)型のインスタンスを実装してみることにしました。もちろん、このすべてを無視します。Functor
Maybe
Tree
Data.Set
Data.Set.map
実際のインスタンス自体は非常に単純で、次のように記述しました。
instance Functor Set.Set where
fmap f empty = Set.empty
fmap f s = Set.fromList $ map f (Set.elems s)
しかし、私はたまたまこの関数を使用しているので、コンパイラエラーで説明されているように、で使用fromList
される型を要求するクラス制約が発生します。Set
Ord
Error occurred
ERROR line 4 - Cannot justify constraints in instance member binding
*** Expression : fmap
*** Type : Functor Set => (a -> b) -> Set a -> Set b
*** Given context : Functor Set
*** Constraints : Ord b
参照:実例
インスタンスに制約を設定するか、型シグネチャをに追加しようとしましたfmap
が、どちらも成功しませんでした(どちらもコンパイラエラーでした)。
このような状況で、どのように制約を満たし、満たすことができますか?可能な方法はありますか?
前もって感謝します!:)