Я новичок в haskell и пытаюсь внедрить церковную кодировку для натуральных чисел, как объясняется в this guide.Тип соответствует только внутри функции в haskell
{-# LANGUAGE RankNTypes #-}
newtype Chur = Chr (forall a. (a -> a) -> (a -> a))
zero :: Chur
zero = Chr (\x y -> y)
-- church to int
c2i :: Chur -> Integer
c2i (Chr cn) = cn (+ 1) 0
-- this works
i1 = c2i zero
-- this doesn't
i2 = zero (+ 1) 0
Для i2
я получаю несоответствие типов:
Couldn't match expected type ‘(Integer -> Integer) -> Integer -> t’
with actual type ‘Chur’
Relevant bindings include i2 :: t (bound at test.hs:14:1)
The function ‘zero’ is applied to two arguments,
but its type ‘Chur’ has none
In the expression: zero (+ 1) 0
In an equation for ‘i2’: i2 = zero (+ 1) 0
Как прийти Chur
может принимать аргументы, когда обернутый в функции, но не может без него?
Thx, любая идея, как печатать эти подстановки? http://stackoverflow.com/questions/36650044/show-substitutions-in-ghci – dimid
@dimid Вы вводите их на клавиатуре, как и я. – molbdnilo