KindSignatures
kind注釈をつけられるGHC拡張
無くてもkind推論されるが可読性のために付けたい
kind推論に失敗するので付けたい
というケースもある #??
あるなら具体例を見たいmrsekut.icon
Natみたいに*じゃないやつを使うときとか?
例 ref
code:before.hs
data Complex a b c = Complex (a (Maybe (b c)))
code:after.hs
data Complex (a :: * -> *) (b :: * -> *) (c :: *) = Complex (a (Maybe (b c)))
GADTsとよく併用される
https://haskell.jp/blog/posts/2017/10-about-kind-system-part1.html#種注釈
code:hs
data GadtsSample :: * -> * where
GadtsSample :: a -> GadtsSample a
GadtsSampleは、*を取って、*を返す
こう書いても同じ
code:hs
data GadtsSample (a :: *) where
GadtsSample :: a -> GadtsSample a
GadtsSampleは、*である型引数aを取る
コレ合ってる?
上の書き方と比べてわかりにくくない?mrsekut.icon
型引数が増えたときの例もみてみるとか
#??
関数の型宣言みたいに別の行として書きたいよねmrsekut.icon
何でこのときだけtsの型宣言みたいな感じなんだ
pursはそれができる ref
code:purs(hs)
data Proxy :: forall k. k -> Type
data Proxy a = Proxy
StandaloneKindSignaturesかこれ
参考
About kind system of Haskell (Part 1) - Haskell-jp
https://haskell.jp/blog/posts/2017/13-about-kind-system-part2.html#トップレベル種注釈