私はApplicativeの式を以下していると私はそれが間違っている知っている:コンパイラは何を意味しますか?
Prelude> [Just (*2), Just (+9)] <*> [(Just 3),(Just 4), (Just 5)]
をし、コンパイラは文句:
<interactive>:2:2: error:
* Couldn't match expected type `Maybe Integer -> b'
with actual type `Maybe (Integer -> Integer)'
* Possible cause: `Just' is applied to too many arguments
In the expression: Just (* 2)
In the first argument of `(<*>)', namely `[Just (* 2), Just (+ 9)]'
In the expression:
[Just (* 2), Just (+ 9)] <*> [(Just 3), (Just 4), (Just 5)]
* Relevant bindings include it :: [b] (bound at <interactive>:2:1)
コンパイラが言って何をしようとしているのでしょうか?
このエラーメッセージ:
* Couldn't match expected type `Maybe Integer -> b'
with actual type `Maybe (Integer -> Integer)'
それは表現のこの部分[Just (*2), Just (+9)]
を意味しますか?
(<*>) :: [] (Maybe Integer -> b) -> [] (Maybe Integer) -> [] b
b
が型を持っている必要があります。
(<*>) :: f (a -> b) -> f a -> f b
は、上記List
とMaybe
型コンストラクタでそれを代用:
(<*>)
の署名を見てみましょうか?
これは、いくつかの 'b'に対して' Maybe Integer - > b'型を期待しますが、 'Maybe(Integer - > Integer)'を与えています。しかし、それは単にコンパイラが述べたことを述べています。このエラーのどの部分を誤解していますか? (エラーは実際に '[Just(* 2)、Just(+9)] 'を参照していますが、エラー自体にも明記されています。フリータイプ変数) – user2407038
恐ろしい、今私は参照してください。 '多分(整数 - >整数)'は関数ではなく、むしろ型だけです。ありがとう。 –