私はfollowing Haskell bookて働いている - 章Walk the Lineを見て:私はGHCiの中で、次のコードを実行するとghciがこのタイプに一致しないのはなぜですか?
:
type Birds = Int
type Pole = (Birds,Birds)
x -: f = f x
:{
landLeft :: Birds -> Pole -> Maybe Pole
landLeft n (left,right)
| abs ((left + n) - right) < 4 = Just (left + n, right)
| otherwise = Nothing
:}
:{
landRight :: Birds -> Pole -> Maybe Pole
landRight n (left,right)
| abs (left - (right + n)) < 4 = Just (left, right + n)
| otherwise = Nothing
:}
--Failure
(0,0) -: landLeft 1 -: landRight 4
--(0,0) -: landLeft 1 -: landRight 4 -: landLeft (-1) -: landRight (-2)
--(0,2)
私はエラーを取得する:
Prelude> (0,0) -: landLeft 1 -: landRight 4
<interactive>:17:24: error:
• Couldn't match type ‘Maybe Pole’ with ‘(Birds, Birds)’
Expected type: Maybe Pole -> Maybe Pole
Actual type: Pole -> Maybe Pole
• In the second argument of ‘(-:)’, namely ‘landRight 4’
In the expression: (0, 0) -: landLeft 1 -: landRight 4
In an equation for ‘it’: it = (0, 0) -: landLeft 1 -: landRight 4
私の質問is:ghciがこのタイプにマッチしないのはなぜですか?
'たぶんPole'は' Pole'ではありません。 'ポール'を取るものに 'ポール'を渡すことはできません。 LYAHはすぐにこれに入るつもりです。 – AJFarmar
ありがとう@AJFarmar - それは役立ちます。これをどのように解決できるかという点でそれを拡大できますか? – hawkeye
LYAHはこれを行う方法を教えてくれますが、 'a:-f = a >> = f'と書くことができ、'(0,0) 'の代わりに' Just(0,0) 'と書くことができます。しかし、もう一度、LYAHはこれをすぐに説明しようとしています。 – AJFarmar