вопрос хаскельщикам
Apr. 20th, 2018 06:35 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
true x y = x false x y = y lampair :: a -> b -> (a -> b -> c) -> c lampair x y p = p x y pa :: ((a -> b -> c) ->c) -> a pa p = p true
And I see
• Couldn't match type ‘a’ with ‘c’ ‘a’ is a rigid type variable bound by the type signature for: pa :: forall a b c. ((a -> b -> c) -> c) -> a at sample1.hs:8:1-30 ‘c’ is a rigid type variable bound by the type signature for: pa :: forall a b c. ((a -> b -> c) -> c) -> a at sample1.hs:8:1-30 Expected type: a -> b -> c Actual type: c -> b -> c • In the first argument of ‘p’, namely ‘true’ In the expression: p true In an equation for ‘pa’: pa p = p true • Relevant bindings include p :: (a -> b -> c) -> c (bound at sample1.hs:9:4) pa :: ((a -> b -> c) -> c) -> a (bound at sample1.hs:9:1) |
What have I done wrong? What fails here? Is Hindley-Milner "not smart enough"? What am I missing?
no subject
Date: 2018-04-21 02:28 pm (UTC)no subject
Date: 2018-04-21 04:46 pm (UTC)That is, if you don't use lambdas, you get your code, but with the corrected types :)
pa :: ((a->b->a)->c)->c