Очевидно, что тип выражения cps_f (\f -> fmap f cont_cps_a)
недопустим.Поскольку
fmap f cont_cps_a :: Cont r b
и
\f -> fmap f cont_cps_a :: (a->b)->Cont r b
и
cps_f :: ((a->b)->r)->r
cps_f
требуют тип параметра как (a->b)->r
, но теперь он равен (a->b)->Cont r b
.
Вместо использования fmap
вы все еще можете реализовать оператор <*>
, аналогично тому, как ваша fmap
функция для
(Cont cps_f) <*> Cont cps_a = Cont $ \cps_b -> cps_f (\f -> cps_a (cps_b . f))