标签: monads

读者monad的目的是什么?

读者monad是如此复杂,似乎没用.在像Java或C++这样的命令式语言中,如果我没有弄错的话,读者monad没有相同的概念.

你能给我一个简单的例子并清楚一点吗?

monads haskell reader-monad

115
推荐指数
3
解决办法
3万
查看次数

避免嵌套try catch块的模式?

考虑一种情况,我有三种(或更多)方法执行计算,每种方法都可能因异常而失败.为了尝试每次计算,直到我们找到一个成功,我一直在做以下事情:

double val;

try { val = calc1(); }
catch (Calc1Exception e1)
{ 
    try { val = calc2(); }
    catch (Calc2Exception e2)
    {
        try { val = calc3(); }
        catch (Calc3Exception e3)
        {
            throw new NoCalcsWorkedException();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何可接受的模式以更好的方式实现这一目标?当然,我可以将每个计算包装在一个辅助方法中,该方法在失败时返回null,然后只使用??运算符,但是有一种方法可以更普遍地执行此操作(即,无需为我想要使用的每个方法编写辅助方法)?我已经考虑过使用泛型编写一个静态方法,它在try/catch中包装任何给定的方法,并在失败时返回null,但我不确定如何解决这个问题.有任何想法吗?

c# monads design-patterns try-catch

112
推荐指数
7
解决办法
2万
查看次数

功能设计模式

有许多功能习语:monad,applicatives,arrows等.它们记录在不同的文章中,但不幸的是我不知道任何书籍或文章在一个地方汇总(有Typeclassopedia但它有很多没有很好覆盖的区域).任何人都可以推荐一篇文章/书籍,它可以在一个地方很好地覆盖它们,并且具有FP中级技能的程序员可以访问它吗?

monads haskell functional-programming scala

106
推荐指数
5
解决办法
9788
查看次数

申请人撰写,monad没有

申请人撰写,monad没有.

上述陈述是什么意思?什么时候比其他人更好?

monads haskell functional-programming monad-transformers applicative

104
推荐指数
5
解决办法
1万
查看次数

为什么我们有map,fmap和liftM?

map :: (a -> b) -> [a] -> [b]

fmap :: Functor f => (a -> b) -> f a -> f b

liftM :: Monad m => (a -> b) -> m a -> m b
Run Code Online (Sandbox Code Playgroud)

为什么我们有三个不同的功能,基本上是一样的?

monads redundancy haskell list functor

96
推荐指数
1
解决办法
8718
查看次数

什么是索引monad?

什么是索引monad和这个monad的动机?

我已经读过它有助于跟踪副作用.但类型签名和文档并没有把我带到任何地方.

什么是如何帮助跟踪副作用(或任何其他有效的例子)的例子?

monads haskell

94
推荐指数
5
解决办法
1万
查看次数

State,ST,IORef和MVar之间的区别

我正在通过48小时为自己编写一个方案(我大约85小时)而且我已经完成了关于添加变量和赋值的部分.本章中有一个很大的概念性跳跃,我希望它分两步完成,两者之间有很好的重构,而不是直接跳到最终的解决方案.无论如何…

我已经得到了一些不同类的,似乎达到相同的目的失去了:State,ST,IORef,和MVar.文本中提到了前三个,而最后三个似乎是许多关于前三个问题的StackOverflow问题的最佳答案.它们似乎在连续调用之间都处于状态.

这些是什么以及它们如何彼此不同?


特别是这些句子没有意义:

相反,我们使用一个名为状态线程的功能,让Haskell为我们管理聚合状态.这使我们可以像在任何其他编程语言中一样处理可变变量,使用函数来获取或设置变量.

IORef模块允许您在IO monad中使用有状态变量.

所有这一切都使这条线路type ENV = IORef [(String, IORef LispVal)]混乱 - 为什么第二个IORef呢?如果我写的话会破坏什么type ENV = State [(String, LispVal)]

variables monads haskell state-monad ioref

87
推荐指数
3
解决办法
1万
查看次数

如何在haskell中使用Control.Monad.Writer?

我是函数式编程的新手,最近在Learn You a Haskell学习,但是当我完成本章时,我遇到了以下程序:

import Control.Monad.Writer  

logNumber :: Int -> Writer [String] Int  
logNumber x = Writer (x, ["Got number: " ++ show x])  

multWithLog :: Writer [String] Int  
multWithLog = do  
    a <- logNumber 3  
    b <- logNumber 5  
    return (a*b)
Run Code Online (Sandbox Code Playgroud)

我将这些行保存在.hs文件中,但无法将其导入我的ghci,抱怨:

more1.hs:4:15:
    Not in scope: data constructor `Writer'
    Perhaps you meant `WriterT' (imported from Control.Monad.Writer)
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)

我通过":info"命令检查了类型:

Prelude Control.Monad.Writer> :info Writer
type Writer w = WriterT w Data.Functor.Identity.Identity
               -- Defined in …
Run Code Online (Sandbox Code Playgroud)

monads haskell

87
推荐指数
2
解决办法
1万
查看次数

mtl,变形金刚,monads-fd,monadLib,以及选择的悖论

Hackage有几个monad变换器包:

  • mtl:Monad变压器库
  • 变形金刚:混凝土仿函数和monad变压器
  • monads-fd:Monad类,使用函数依赖
  • monads-tf:Monad类,使用类型族
  • monadLib:monad变换器的集合.
  • mtl-tf:使用类型族的Monad变换器库.
  • mmtl:模块化Monad变压器库
  • mtlx:具有类型索引的Monad变换器库,提供"免费"副本.
  • compose-trans:可组合的monad变换器

(也许我错过了一些)

我们应该使用哪一个?

mtl是Haskell平台中的一个,但我一直听说reddit它是不酷的.

但无论如何,选择有什么不好,这不是一件好事吗?

好吧,我看到数据访问器的作者如何必须使所有这些满足流行的选择:

  • data-accessor-monadLib库:monadLib monad的访问器函数
  • data-accessor-monads-fd library:使用Accessor访问monads-fd State monad类中的状态
  • data-accessor-monads-tf library:使用Accessor访问monads-tf状态monad类型系列中的状态
  • data-accessor-mtl library:使用Accessor访问mtl State monad类中的状态
  • data-accessor-transformers library:使用Accessor访问变换器State monad中的状态

我想如果这种情况继续下去,例如几个竞争的箭头包演变,我们可能会看到类似:spoonklink-arrows-transformers,spoonklink-arrows-monadLib,spoonklink-tfArrows-transformers,spoonklink-tfArrows-monadLib,...

然后我担心如果spoonklink被分叉,Hackage将耗尽磁盘空间.:)

问题:

  • 为什么有这么多monad变压器包?
  • 为什么mtl [被认为]不酷?
  • 有哪些主要区别?
  • 大多数这些看似竞争的软件包都是由Andy Gill编写的,由Ross Paterson维护.这是否意味着这些软件包不是竞争对手,而是以某种方式协同工作?安迪和罗斯认为他们自己的任何套餐都已过时吗?
  • 你和我应该使用哪一个?

monads haskell monad-transformers

84
推荐指数
3
解决办法
6374
查看次数

选项[T]类有什么意义?

我无法理解Option[T]Scala中的课程要点.我的意思是,我不能看到任何advanages Nonenull.

例如,考虑代码:

object Main{
  class Person(name: String, var age: int){
    def display = println(name+" "+age)
  }

  def getPerson1: Person = {
    // returns a Person instance or null
  }

  def getPerson2: Option[Person] = {
    // returns either Some[Person] or None
  }

  def main(argv: Array[String]): Unit = {
    val p = getPerson1
    if (p!=null) p.display

    getPerson2 match{
      case Some(person) => person.display
      case None => /* Do nothing */
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在假设,该方法getPerson1返回null …

java monads null functional-programming scala

82
推荐指数
9
解决办法
9123
查看次数