Теперь я понимаю сигнатуру типа s (s k)
:
s (s k) :: ((t1 -> t2) -> t1) -> (t1 -> t2) -> t1
И я могу создавать примеры, которые работают без ошибок, в инструменте Haskell WinGHCi:
Пример :
s (s k) (\g -> 2) (\x -> 3)
возвращает 2
.
Пример :
s (s k) (\g -> g 3) successor
возвращает 4
.
где successor
определяется следующим образом:
successor = (\x -> x + 1)
Тем не менее, у меня все еще нет интуитивного ощущения того, что делает s (s k)
.
Комбинаторs (s k)
принимает любые две функции f
и g
.Что s (s k)
делает с f
и g
?Не могли бы вы дать общую картину о том, что s (s k)
делает, пожалуйста?