我想知道在IO monad还没有发明的时候,如何在Haskell中完成I / O。 有人知道一个例子。 编辑:如果没有现代Haskell中的IO Monad,我能完成吗? 我更喜欢与现代GHC一起工作的例子。
你能certificate,如果return a = return b然后a=b ? 当我使用= ,我的意思是在法律和certificate的意义上,而不是Eq意义。 我所知道的每一个monad似乎都能满足这个要求,我想不出一个有效的monad,而不是( Const a是一个函数和应用,而不是monad)。
我正在寻找monads的创意用途来学习。 我读过某个地方,人工智能中使用monad,但作为monad新手,我看不出如何。 请包括一个链接到源代码和样本用法。 没有标准的单子,请。
每当有人承诺要“解释单子”时,我的兴趣就会激化,只有当所谓的“解释”是一个长长的清单时,才会被挫败所取代。想法“在这一点上”太复杂了“。 现在我要求相反。 我对类别理论有着坚实的把握,我不害怕追图,Yoneda的引理或派生的函子(实际上就是在类别意义上的monad和adjunctions)。 有人能给我一个清晰简洁的定义,说明函数式编程中的monad是什么? 例子越less越好:有时一个清晰的概念就是超过一百个胆小的例子。 虽然我不挑剔,但Haskell会很好地作为示范语言。
Monads通常会被解释为return和bind 。 不过,我收集你也可以通过join (和fmap ?)来实现bind 在缺乏一streamfunction的编程语言中, bind使用起来非常尴尬。 join ,另一方面,看起来相当容易。 但是,我并不完全确定我明白join方式。 显然,它有[Haskell]types join :: Monad m => m(mx) – > mx 对于单子列表,这是平凡而明显的concat 。 但是对于一般的monad来说,这个方法实际上在做什么呢? 我看到它对types签名有什么作用,但是我想弄清楚如何在Java或类似语言中写这样的东西。 (其实,这很容易:我不会,因为generics被打破了;-)但原则上这个问题仍然存在…) 哎呀。 看起来这已经被问到过了: Monad连接function 有人可以使用return , fmap和join来概述常见monads的一些实现吗? (也就是说,根本不提>>= 。)我认为也许这可能会帮助它沉入我的愚蠢的大脑中。
在我的业务领域 – 一家金融机构的后台IT部门 – 软件组件周围进行全局configuration,logging进度,出现某种error handling/计算短路是非常常见的事情。可以很好地用Haskell中的Reader,Writer,Maybe-monads等来模拟,并与monad变换器组合在一起。 但似乎有一些缺点:monad变换器背后的概念是相当棘手和难以理解的,monad变换器导致非常复杂的types签名,并造成一些性能损失。 所以我想知道:在处理上面提到的这些常见任务时,单变换器是否是最佳实践?
我有一个string列表,并试过这个: ls = [ "banana", "mango", "orange" ] main = do map PutStrLn list_of_strings 这没有用,我不明白为什么。 ghc print-list.hs print-list.hs:3:0: Couldn't match expected type `IO t' against inferred type `[IO ()]' In the expression: main When checking the type of the function `main' 任何提示? 我想这与地图返回一个列表,而不是一个值,但我没有find一个简单的方法来解决这个问题。 现在我知道打印string列表的唯一方法是编写一个迭代列表的函数,打印每个元素(如果列表是[a],则打印,但如果是(a:b)则打印并recursion)。 但是使用map会简单多了 谢谢!
似乎有一个共识,你应该使用Parsec作为应用而不是monad。 应用性parsing与单体parsing有什么好处? 样式 性能 抽象化 monadicparsing出来了吗?
我明白,ST monad就像IO的一个小兄弟,反过来也是joinRealWorld魔法的状态monad。 我可以描绘出状态,我可以想象RealWorld是以某种方式投入到IO中的,但是每次我写ST的types签名时,ST monad的s让我困惑。 以ST s (STArray sab)为例。 它在那里工作? 它只是用来在计算之间build立一些仿真数据依赖关系,而不能像状态monad中的状态那样引用(由于全部)? 我只是抛出想法,会非常感激比我更懂事的人向我解释。
有一件事让我困惑不已,那就是现在是否可以使用IORef。 在决定是否使用IORef来执行任务时,是否有任何指导原则? 什么时候在IORef上使用State Monad?