我试图了解Haskell中的Cont,因此我为此实现了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
的法律,但对我来说,这显然不是怎么做。