我目前正在为我的谨慎数学课程开发一个个人项目,并试图在Haskell中形式化集合论。我们课堂中定义的一个集合是特定宇宙元素的任意嵌套。我选择了代表这是事实上的标准嵌套列表: data Set a where
Empty :: Set a
Elem :: a -> Set a -> Set a
Set :: Set a -> Set a -> Set a
作为一个懒
我一直在考虑下面的一段代码,我想围绕我的头: 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 }