gpt4 book ai didi

haskell - 尝试在 Haskell 中定义自定义绑定(bind)运算符时出错

转载 作者:行者123 更新时间:2023-12-02 13:47:02 25 4
gpt4 key购买 nike

所以我最近对 ​​monad 进行了很多研究,而且我对 Haskell 编程语言非常陌生。

这是我的代码:

import Data.List
import System.IO

f :: Int -> (Int, [Char])
f x = (x, ['a'])

g :: Int -> (Int, [Char])
g y = (y, ['b'])

(>>=) :: (Int -> (Int, [Char])) -> (Int -> (Int, [Char])) -> Int -> (Int, [Char])
(>>=) f1 f2 a = f1 (fst (f2 a))

h :: Int -> (Int, [Char])
h x = (>>=) g f x

GHCI 编译器显示:错误:

Ambiguous occurrence `>>='
It could refer to either `Prelude.>>='

我做错了什么?我是否以正确的方式使用 monad?

最佳答案

您正在为 (>>=) 定义一个绑定(bind),该绑定(bind)已由前奏绑定(bind)(如上面的注释中所指出)。

因此,您需要消除对它的每个引用的歧义。

给你的模块命名

module M where

然后,而不是写

h x = (>>=) g f x

使用其中之一

h x = (M.>>=) g f x

h x = (Prelude.>>=) g f x

选择您想要的 >>= 版本。

但是,我认为这并不是您真正想要做的。这个 (>>=) 将是一个与 Monad 类无关的绑定(bind)。

关于haskell - 尝试在 Haskell 中定义自定义绑定(bind)运算符时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44741131/

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