- 関数型プログラミング言語Haskell Part26
295 :デフォルトの名無しさん[sage]:2014/10/26(日) 21:46:53.03 ID:u4tbdCa8 - FunctionalDependencies オプションについて質問です。
下記のプログラムで class Cook に型依存性(と言うのかな?) a -> b を指定する必要性が分かりません。 ------------------------------ data Nasu = Nasu Int class Cook a b where cook :: a -> b instance Cook Nasu Nasu where cook (Nasu n) = Nasu (n+1) main :: IO () main = do let a = Nasu 1 let b = cook (cook a) :: Nasu return () ------------------------------ cook (cook a) :: Nasu を cook ((cook a) :: Nasu) :: Nasu に変えればオプション不要でコンパイルが通ります。 ですが、このプログラムなら (cook x) :: Nasu の x は Nasu 以外にありえないので、 現状のままでも cook (cook a) :: Nasu の内側の cook a は Nasu だと推論されても良さそうなんですが・・・ デフォルトでは、cook ::a -> b の a から b も、逆に b から a も推論しないのでしょうか?
|