型制約種
Constraint
kindの一種
*以外のkindの一つ
型クラス制約を表すkind
code:prelude
:k Eq
Eq :: * -> Constraint
:k Monad
Monad :: (* -> *) -> Constraint
新たにHaskellの型クラスを作ることで、新たなConstraintができる
dataで定義されたものは別
こっちは*ができる
型制約のペアのkind
code:prelude
// 普通のもの
:k (Bool, Int)
(Bool, Int) :: *
// 型制約種のもの
:k (Monad Maybe, Monoid Bool)
(Monad Maybe, Monoid Bool) :: Constraint
(Constraint, Constraint, .. )を受け取り、全てを満たすConstraintを返す
参考
Haskellの種(kind)について (Part 2) - Haskell-jp