48得票7回答
在Haskell中应该避免使用do-notation吗?

大多数Haskell教程都教授使用do-notation进行IO操作。 我也是从do-notation开始的,但这使得我的代码看起来更像是命令式语言而不是函数式语言。 本周我看到一个教程使用<$>来进行IO操作。stringAnalyzer <$> readFile...

39得票6回答
在列表单子中使用return和不使用return的区别

我开始了我的大型 Haskell 征程 (GHC :) ),但 monads 和 IO 函数让我有点困惑。 有人能简单地解释一下这两个函数之间的区别吗?f1 = do x <- [1,2] [x, x+1] -- this is monad, right? f2 = d...

32得票1回答
为什么在类似于“runSomeMonad $ do ...”的调用中需要使用$符号?

runSomeMonad do ... 的唯一可能解释似乎是 runSomeMonad (do ...)。为什么 Haskell 语法不允许第一种变体?是否存在某些情况下 foo do bar 可能会产生歧义?

28得票1回答
为Monad解析do-notation

在学习 Haskell 的过程中,我意识到 do 表示法只是一种语法糖:a = do x <- [3..4] [1..2] return (x, 42) 翻译成a = [3..4] >>= (\x -> [1..2] >>= (\...

19得票2回答
在Haskell中,是否有可能自定义语法糖(例如do-notation或arrow-notation)?

好的,问题已经很明确了。假设我想为了好玩实现一些特殊的语法,这是否可能?我应该使用什么工具?

17得票3回答
状态单子、随机数序列和单子代码

我试图理解状态单子,为此我想编写一段使用线性同余生成器(可能不太好,但我的目的仅是学习状态单子,而不是构建一个好的随机数生成库)生成随机数序列的单子代码。 生成器只是这样的(我想为了简单起见生成一系列Bool):type Seed = Int random :: Seed -> (B...

17得票1回答
Haskell - “如何在“do”块中正确使用“if”语句?”

可能是重复问题: Haskell中的“什么也不做”的IO,或者没有else的if语句 这些"简单"的代码行出现了错误...action = do isdir <- doesDirectoryExist path -- check if directory ex...

16得票2回答
如何在do表示法中避免不必要的变量?

在Haskell的do-notation块中,我希望有一个变量is_root来指示我是否为root:import System.Posix.User main = do uid <- getRealUserID is_root <- return $ uid == ...

15得票1回答
where绑定、let绑定和单一赋值操作符(<-)之间的区别

我不理解这三种语法的区别: where a = f (b) do a &lt;- f (b) do let a = f (b) 虽然我有一点理解 a &lt;- f(b) 与其他两种语法不同,在我尝试了所有三种语法的大多数情况下都可以工作。还有我在网上看到过,每个块中...

13得票4回答
Haskell中do块中简洁的if-then-else表示法

我无法弄明白如何让简洁的 if-then-else 符号运作,它在 [ http://hackage.haskell.org/trac/haskell-prime/wiki/DoAndIfThenElse ] 中提到。这个可以工作,import System.Environment main ...