- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么不是 MonadTrans
定义为
class MonadTrans t where
lift :: (Monad m, Monad (t m)) => m a -> t m a
-- ^^^^^^^^^^^
class MonadTrans t where
lift :: Monad m => m a -> t m a
最佳答案
bheklilr 的回答让我想到了一个例子,在这个例子中,monad 转换器产生了一些不是 monad 的东西。一个不是 monad 的著名例子是 ZipList
。我们可以制作一个变体,在每个级别运行一个单子(monad) Action :
import Control.Applicative
import Control.Arrow ((***))
import Control.Monad
import Control.Monad.Trans
-- | A list where each step is produced by a monadic action.
data ListT m a = Nil | Cons (m (a, ListT m a))
Functor
和一个
Applicative
instance Monad m => Functor (ListT m) where
fmap f Nil = Nil
fmap f (Cons k) = Cons $ (f *** fmap f) `liftM` k
instance Monad m => Applicative (ListT m) where
pure x = Cons $ return (x, pure x)
Cons mf <*> Cons mx = Cons $ do
(f, fs) <- mf
(x, xs) <- mx
return (f x, fs <*> xs)
_ <*> _ = Nil
MonadTrans
实例,它将一个单子(monad)转换成一个只有
Applicative
的东西。
instance MonadTrans ListT where
lift mx = Cons $ (\x -> (x, lift mx)) `liftM` mx
ZipSink
也是一个很好的例子。)
MonadTrans
的定律定义为
lift . return = return
lift (m >>= f) = lift m >>= (lift . f)
lift (f `liftM` x) = fmap f (lift x)
lift . return = pure
lift (m `ap` f) = lift m <*> lift f
关于haskell - 为什么电梯的返回值不被限制为单子(monad)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18494010/
它类似于背包问题,但更复杂。 A到B有电梯,1趟价格如下: 1) 如果只有一个人 - 以美分为单位的高度 - 如果 180 -> 180 美分 2) 如果超过一个人 -> 最大高度:[180, 150
我是新手,正在尝试编写一个简单的登录应用程序。当我离开登录页面一段时间并输入用户名和密码时,它不会登录,而是会执行 session 过期行为。我检查了日志,发现每当我收到 INFO - Session
有没有人尝试使用 MVC 而不是 View 优先来做一个 scala/lift 应用程序? 我知道您可以将 Controller / View 创建为: package test.test.test.
我正在阅读 Silberschatz's OS book .在第 16.8.1 节中说: The fundamental problem with the elevator algorithm is
由于 Lift 是有状态的,因此对页面/网站的每个后续请求都必须返回到同一台服务器。据推测,这意味着前端负载平衡器需要跟踪哪个客户端正在与哪个服务器通信。 在像 Heroku/Elastic Bean
是否可以将 Lift 的 CSS 选择器转换与 DispatchSnippet 一起使用?它似乎对我不起作用。 最佳答案 回答我自己的问题...是的,这是可能的!我的问题如下:代码片段方法必须是 No
如何在 Eclipse 中为 Scala/Lift 项目设置热部署? 基本上,我希望能够 建立一个新项目,例如 lift-archetype-basic 从一些运行配置或通过终端启动 jetty:ru
我正在阅读 Gilberto T. Garcia Jr 编写的 Lift 应用程序开发指南,但遇到了一个我似乎无法解决的问题。我已经复制了源代码 Chap06-map-table,并尝试修改它以与我的
我有一些无法更改的奇怪 json,我希望使用电梯中的 JsonParsen。 一个典型的 json 是这样的: {"name":"xxx", "data":{ "data_1
我正在尝试编写一个 Specs2 测试,该测试将测试片段的输出以响应通常从模板传入的不同参数,但我无法弄清楚如何去做。 例如,使用此 div 中的代码段标注: 我将参数 param1 传递给代码段。
我以前从未问过论坛问题,所以如果我违反规则是无意的,我很抱歉。 我在 IntelliJ Idea IDE 中使用 scala/lift 和 jetty 制作了一个网络应用程序。我有一个为 .net 框
我是一名优秀的程序员,十分优秀!