-
61 votesanswersviews
暂停单子
Monads可以做许多惊人的,疯狂的事情 . 他们可以创建包含值叠加的变量 . 它们可以允许您在计算之前访问未来的数据 . 它们可以让您编写破坏性更新,但不是真的 . 然后延续monad允许你打破人们的思想!通常是你自己的 . ;-) 但这是一个挑战:你能制作一个可以暂停的单子吗? data Pause s x instance Monad (Pause s) mutate :: (s ->... -
2 votesanswersviews
如何将两个ErrorT monad变换器叠加在一起?
假设我有这两个函数: errorm :: ( MonadError String m ) => Bool -> m Int errorm cond = if cond then return 1 else throwError "this is an error" errorms :: ( MonadError String m ) => Bool -&g... -
10 votesanswersviews
结合也许和seq monads:在输出中混淆
我在下面展开了我的代码,但这里也是working gist . 这是我的monadic业务逻辑 def get_loan(name): m_qualified_amounts = ( bind(get_banks(name), lambda bank: bind(get_accounts(bank, name), lambda account: ... -
83 votesanswersviews
mtl,变形金刚,monads-fd,monadLib,以及选择的悖论
Hackage有几个monad变换器包: mtl:Monad变压器库 transformers:混凝土仿函数和monad变换器 monads-fd:Monad类,使用函数依赖项 monads-tf:Monad类,使用类型系列 monadLib:monad变形金刚的集合 . mtl-tf:使用类型族的Monad变换器库 . mmtl:模块化Monad变压器库 mtlx... -
3 votesanswersviews
生成在另一个解析器的输出上运行接收的解析器的解析器,并单独加入结果
给定以下类型和函数,意味着将CSV字段的字段解析为字符串: type Parser resultType = ParsecT String () Identity resultType cell :: Parser String 我已经实现了以下功能: customCell :: String -> Parser res -> Parser res customCell typeN... -
14 votesanswersviews
Haskell Monad变换器堆栈和类型签名
我正在尝试创建一堆monad变换器,并且无法为我的函数获取正确的类型签名 . (我仍然是Haskell的新手) 该堆栈结合了多个StateT变换器,因为我有多个状态需要跟踪(其中两个可能是tupled,但我会在一秒钟内完成)和一个WriterT用于记录 . 这是我到目前为止所拥有的: module Pass1 where import Control.Monad.Identity import ... -
6 votesanswersviews
如何在scalaz 7中使用变换器在monad堆栈之间进行转换
我正在努力用 Scalaz7 来理解monad堆栈和monad变换器 . 我觉得我能绕过一个特定的步骤 . 以下代码在磁盘上查找 ffmpeg 二进制文件,然后创建要运行的可执行命令,然后执行该命令,然后对输出执行一些微不足道的操作 . object Encoder { def findFfmpeg: OptionT[IO, String] = { OptionT[IO, Strin... -
7 votesanswersviews
如何分离具有副作用的组件?
我正在尝试在Haskell中创建一个基于代理的系统 . 为此,我需要在逻辑上将代理和环境部分分开,例如使用不同的测试和真实环境运行 . 组件类型,代理和环境都会有很多有状态的东西,所以我选择使用monad变换器堆栈来构建每个组件 . 我将组件接口移动到类型类,该类由环境实现 . 实现此类型类的Monad可用于通过将它们插入代理变换器来完成整个变换器堆栈 . 我创建了一个工作概念证明,发布在下面 .... -
0 votesanswersviews
Haskell StateT和ExceptT链
我不是很好的哈斯克尔程序员 . 我的任务是在我的大学编写一个编译器,我选择了haskell,因为它是用于此目的的好工具 . 我使用monads StateT和ExcepT,所以我有类型: type Runner r s = StateT s (ExceptT LatteError IO) r type RT r s = IO (Either LatteError (r, s)) 我用它创建wal... -
11 votesanswersviews
如何将IO操作的结果注入非IO monadic计算中
我有一点建筑问题,我可以帮助我这个常见的模式或抽象 . 我是writing a game engine用户可以将游戏循环指定为表单的monadic计算: gameLoop :: TimeStep -> a -> Game a 其中 Game monad有一堆接入点,用于绘制,转换和连接引擎 . 然后,我还提供了一个用户调用来运行模拟的函数 runGame :: (TimeStep ... -
4 votesanswersviews
MaybeT / Maybe和IO:故障安全阅读信息
我试图读取用户输入的信息并将其解析为 Person 类型,该类型使用 Gender 类型 . 为此,我使用此代码: data Person = Person String Int Gender String data Gender = Male | Female | NotSpecified deriving Read instance Show Gender where show Ma... -
3 votesanswersviews
Monad变形金刚文件:eval1没有进行类型检查
我正在阅读Monad Transformer文件 . 我遇到过这个代码示例: import qualified Data.Map as Map import Control.Monad.Identity type Eval1 a = Identity a runEval1 :: Eval1 a -> a runEval1 ev = runIdentity ev type Name = ... -
8 votesanswersviews
如何将可变向量放入状态Monad
我在haskell中编写了一个小程序,使用State Monad with Vector计算Tree中所有的Int值的出现次数: import Data.Vector import Control.Monad.State import Control.Monad.Identity data Tree a = Null | Node (Tree a) a (Tree a) deriving Sho... -
17 votesanswersviews
Monad变压器用于进度跟踪
我正在寻找一个可用于跟踪程序进度的monad变换器 . 要解释如何使用它,请考虑以下代码: procedure :: ProgressT IO () procedure = task "Print some lines" 3 $ do liftIO $ putStrLn "line1" step task "Print a compli... -
30 votesanswersviews
最简单的非平凡单子变换器例子为“假人”,IO也许
有人可以提供一个超级简单(几行)的monad变换器示例,这是非平凡的(即不使用Identity monad - 我理解) . 例如,有人会如何创建一个执行IO并可以处理失败的monad(可能)? 什么是最简单的例子来证明这一点? 我已经浏览了一些monad变换器教程,他们似乎都使用State Monad或Parsers或者复杂的东西(对于newbee) . 我想看到一些比这简单的东西 . 我认为... -
5 votesanswersviews
将错误值提升到ErrorT monad转换器
我想我缺少对monad变换器的基本理解,因为我发现自己编写了这段代码: import Control.Monad.Identity import Control.Monad.Error liftError :: Either String Int -> ErrorT String Identity Int liftError x = do case x of ... -
0 votesanswersviews
在变压器堆栈内调用monadic函数
在Monad变形金刚上完成了我的第一次破解 . 为我的 class 称之为“设施位置”的问题写了一个简单的遗传算法 . 算法并不那么重要 . 我通常遵循本章Real World Haskell中解释的格式 . 我的变压器堆栈看起来像这样 newtype FacilityApp a = MyA { runA :: RandT StdGen ( ReaderT Environment ( Sta... -
4 votesanswersviews
Monad Transformer与MaybeT和RandT叠加
我正在尝试通过重新分解我在第一次学习Haskell时所写的内容来了解Monad变形金刚是如何工作的 . 它有相当多的组件可以替换为(相当大)的Monad变换器堆栈 . 我开始为我的堆栈编写一个类型别名: type SolverT a = MaybeT (WriterT Leaderboard (ReaderT ... -
20 votesanswersviews
为什么monad变换器与堆叠monad不同?
在许多情况下,我不清楚将两个monad与变压器组合而不是使用两个单独的monad可以获得什么 . 显然,使用两个独立的monad是一件麻烦事,并且可能涉及到符号内部的符号,但是有些情况下它只是表达不够吗? 一个案例似乎是列表上的StateT:组合monads不能得到正确的类型,如果你通过像Bar这样的monad栈获得正确的类型(其中Bar a =(Reader r(List(Writer w(Id... -
3 votesanswersviews
Monad变形金刚升降机
我只是在现实世界的Haskell中研究monad变换器 . 这本书说要制作monad变换器,你需要使它成为MonadTrans类型的一个实例 . 所以这本书定义了一个新的Transformer,即 MaybeT m a 变压器 . 他们为这个新的变换器定义了monadTrans类型: instance MonadTrans MaybeT where lift m = MaybeT (Just ... -
3 votesanswersviews
如何在Haskell中组合List和State Monad
我想基本上映射一个列表,同时携带一些状态 . 我认为结合列表和状态monad可能会让我在那里 . 我尝试了一些事情,并发现我可能需要使用 ListT . 作为我实际问题的简化版本,假设我想实现 sum 函数,同时还返回原始列表的修改版本 . 这个或类似的是我想象它必须看起来像: sum' :: ListT (State Int) Int sum' = do lift $ put 0 ... -
19 votesanswersviews
monad变换器是否适用于从服务中获取JSON?
我玩了! 2用于Scala应用程序,需要从外部服务检索JSON格式的某些数据 . 表演!框架允许通过将响应包装在_1281291中来异步发出HTTP请求 . Promise 是一个monad,它包含将来可用的值 . 这很好,但在我的情况下,我从Web服务得到的是一个JSON字符串 . 我必须解析它,解析可能会失败 . 所以我必须将我得到的任何内容包装成 Option . 结果是我的许多方法都... -
16 votesanswersviews
没有monad变换器的monad的明确示例是什么? [重复]
这个问题在这里已有答案: Is there a monad that doesn't have a corresponding monad transformer (except IO)? 3个答案 Monad变换器以所有标准monad(Reader,Writer,State,Cont,List等)而闻名,但这些monad变换器中的每一个都以稍微不同的方式工作 . 在给定具有monad实例的类...