#typse synonym の部分適用を使うと、任意ではなく強制的に書かされるということです。「type synonym の部分適用で型推論がうまくいかなくなるところ」に書くことになるので。
#type Foo a = (Bar a, a)
instance Functor Foo where
...
とは書けないけど,
type Foo = \ a -> (Bar a, a)
instance Functor Foo where
...
ならOKということなら,とりあえず私としては歓迎だなぁ.
#type Foo a = (Bar a, a)
instance Functor (\a -> Foo a) where
...
#なら Ok という形だとどうですか?
#\a -> Foo a に名前が付けられないのでは使い物にならないので確かに嬉しくないのですが。。。
#どこでカインドが * になるかが分かればよいということなのかな?だとると type Foo a :: * = (Bar a, a)という記述があればなんとかなるとか。そういう問題じゃないのかな。ちがうか。
#あっ、そっか。別名つけられないと不便(ですし、値レベルの関数と比べて型族が不自然な感じになる)ので、これしか書けないというデザインにはしないかもしれませんね。
#(もちろん、理論的な制約がなければですが。)
#Foo :: * -> *
type Foo a = (Bar a, a)
とか書けばなんとかなるとか...
#ちがうなこれも
#type Foo :: * -> * = \ a -> (Bar a, a)
#かな
#type Foo :: k -> * = \ a -> (Bar a, a)
#は OK?
#GHC 7.4.1 で kind polymorphism が使えるようになりますが。(明示的に書くのは未対応ですけれど……) http://t.co/BJ1OHfCZ #あっ、実体参照にエスケープされて変な表示に……。
#type Foo :: k -> * = \ a -> (Bar a, a)
#です。
#ああなるほど。
#type Foo :: k -> * = \ a -> (Bar a, a)
#と書けば
#たとえば
#instance Functor Foo where とか書いてもよいというなら大歓迎ですね。