我一直在考慮下面的一段代碼,我想圍繞我的頭: data MyExample e i = MyExample (CustomMonad e i)
| forall b. MyExample e b :>>= (b -> CustomMonad e b)
| forall b. (MyExample e (b -> a)) :<*> (MyExample e b)
| f
我有一個關於重構Parsec代碼使用Applicative接口的問題。假設我有使用單子接口這樣的解析器: filePath0 :: GenParser Char st Info
filePath0 = do
optional (string "./")
r <- artist
slash
l <- album
slash
t <- tr
我有這種類型的工作,基本上是Kleisli箭頭: {-# language DeriveFunctor #-}
data Plan m i o = Plan (i -> m o) deriving Functor
instance (Monad m) => Applicative (Plan m i) where
pure x = Plan (\_ -> pure x)
我對coq很新穎,迄今爲止我設法證明了我也可以通過手工證明的東西。所以當我遇到Selection monad並決定在haskell中實現它時,我認爲這將是一個很好的練習,但我被卡住了。有人能提供一個coq證明的例子,說明選擇monad是應用程序和monad嗎?這是一個函數的haskell實現。 newtype Sel r a = Sel { runSel :: (a -> r) -> a }
我目前正在爲我的謹慎數學課程開發一個個人項目,並試圖在Haskell中形式化集合論。我們課堂中定義的一個集合是特定宇宙元素的任意嵌套。我選擇了代表這是事實上的標準嵌套列表: data Set a where
Empty :: Set a
Elem :: a -> Set a -> Set a
Set :: Set a -> Set a -> Set a
作爲一個懶