gpt4 book ai didi

haskell - Haskell 中是否可以重载逻辑运算符(&& 例如)?

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

我正在处理多值逻辑并尝试重载基本逻辑函数。

我对重载 NumEq 运算符没有问题,但我不知道如何重载 &&、||不是

这可能吗?谢谢各位的解答!

最佳答案

Haskell 根本没有重载(=临时多态性)。 +* 等不是函数,而是类方法:“重载”它们更像是定义 OO 接口(interface)的具体后代/纯粹-抽象类而不是 C++ 中的重载函数。

逻辑运算符OTOH只是普通函数,在Prelude中一劳永逸地定义了。

然而,在 Haskell 中,中缀运算符大多被视为一种特殊的函数名称,它们不是实际语法定义的一部分。没有什么可以阻止您定义具有相同目的的新的、不同运算符,例如

class Booly b where
true :: b
false :: b
(&&?) :: b -> b -> b
(||?) :: b -> b -> b
infixr 3 &&?
infixr 2 ||?

instance Booly Bool where
true = True
false = False
(&&?) = (&&)
(||?) = (||)

instance Booly MVBool where
true = ...

事实上,只要通过模块限定符消除新名称的歧义就足够了:

import Prelude hiding ((&&), (||))
import qualified Prelude

class Booly b where
true :: b
false :: b
(&&) :: b -> b -> b
(||) :: b -> b -> b
infixr 3 &&
infixr 2 ||

instance Booly Bool where
true = True
false = False
(&&) = (Prelude.&&)
(||) = (Prelude.||)

关于haskell - Haskell 中是否可以重载逻辑运算符(&& 例如)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441760/

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