関数型プログラミング言語Haskell Part21
■ このスレッドは過去ログ倉庫に格納されています
0325デフォルトの名無しさん
2013/02/28(木) 19:46:22.92(y / x) / tan は演算子を使った式だが、これを関数の形にするとこうなる。
(/) ((/) y x) tan
元の式の中央の除算演算子が、関数にした式の最も左側にある関数 (/) だ。
関数 (/) の型は Fractional a => a -> a -> a だ。
この型変数 a には例えば Float 型などが入る。
関数 (/) が第一引数として適用するのは ((/) y x) だが、
x や y が Float 型なので、ちゃんと全体で Float 型になっている。
ところが、ここで関数 (/) が第二引数として適用しようとしているのは関数 tan だ。
この型は Floating a => a -> a であって Float 型ではない。
もう少し優しく言うと、tan :: Float -> FLoat であって、tan :: FLoat ではない。
なので、関数 (/) の型に合ってないよ、という趣旨のエラーが出る。
もし (y / x) / tan ではなく、例えば (y / x) / tan x とかだったら問題ない。
tan x は Float 型なので、この場合の関数 (/) の第2引数として適用できる。
■ このスレッドは過去ログ倉庫に格納されています