generated at
TypeOperators
型演算子を使用可能にするGHC拡張
つまり、型の定義内で演算子を使える
つまり、演算子な型コンストラクタを定義できる


defaultでは (->) が型演算子として定義されている
ghci
:t id > id :: a -> a -- 中置演算子として表示されている :t id :: (->) a a > id :: (->) a a :: a -> a -- 前置としても機能する


ghci
> data a + b = Add a b > :t Add Add :: a -> b -> a + b > :k (+) (+) :: * -> * -> * > :k (+) Int -- 部分適用も同様 (+) Int :: * -> *
タプルっぽい配列型を定義する ref
hs
{-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeOperators #-} data HList xs where HNil :: HList '[] (:::) :: a -> HList as -> HList (a ': as)
Servantでの使用例
hs
type UserAPI = "users" :> "list" :> Get '[JSON] [User]
Getを受け付ける /users/list というendpointを型レベルで定義している


右結合になる
TypeOperator固有の話でもないmrsekut
kind一般の話
* -> * -> * は、 * -> (* -> *) と同じ


参考
型アノテーションの能力も上がっているのかmrsekut
prefixのアノテーションは元からできるが、infixのは拡張によってできるようになる