gpt4 book ai didi

haskell - Control.Monad.Writer 在 Haskell 中不起作用

转载 作者:行者123 更新时间:2023-12-04 23:27:01 25 4
gpt4 key购买 nike

我一整天都在尝试编译 Haskell 代码 - 再次 - 涉及 Control.Monad.Writer。这是一个无法从 Learn You a Haskell 编译的代码示例:

import Control.Monad.Writer  

gcd' :: Int -> Int -> Writer [String] Int
gcd' a b
| b == 0 = do
tell ["Finished with " ++ show a]
return a
| otherwise = do
tell [show a ++ " mod " ++ show b ++ " = " ++ show (a `mod` b)]
gcd' b (a `mod` b)

我收到此错误:
No instance for (Show (Writer [String] Int))
arising from a use of `print'
Possible fix:
add an instance declaration for (Show (Writer [String] Int))
In a stmt of an interactive GHCi command: print it

我试过编译我老师今天写的代码,也涉及 Control.Monad.Writer 但没有任何效果。

我使用的是 Ubuntu 12.04、gedit 和 GHC 7.4.1。

来自 Learn You a Haskell 的所有 Writer monad 程序都无法编译,我很困惑。

最佳答案

你显然输入了类似的东西

ghci> gcd' 12345 6789

在 ghci 提示符下。因此,您要求 ghci 打印类型为 Writer [String] Int 的值,但没有 Show Writer 的实例类型,因此 ghci 无法打印它。您需要申请 runWriter或类似的功能,
ghci> runWriter $ gcd' 12345 6789

应该管用。

关于haskell - Control.Monad.Writer 在 Haskell 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com