Проверка правильности аппликативной реализации для Cont - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь понять Cont в Haskell, поэтому я реализую Functor, Applicative и Monad для этого.

Я определяю Cont как newtype Cont r a = Cont {runCont :: (a -> r) -> r}

Теперь я пытаюсь реализовать <*>.

Я полагаю, что реализация

Cont func <*> Cont value = (\r -> value (\a -> func (\c -> r (c a))))

но в MTL Cont func <*> Cont value = Cont (\r -> func (\f -> value (\ a -> r (f a) ))) обнаружил эту реализацию.

Теперь мой вопрос: как я могу убедиться, что моя реализация верна? Я думаю, чтобы доказать Applicative законы, но для меня это не очевидно, как это сделать.

...