gpt4 book ai didi

haskell - Haskell中不同类型的乘法

转载 作者:行者123 更新时间:2023-12-04 03:17:14 25 4
gpt4 key购买 nike

我是haskell的新手,有时我会遇到一个问题,我会在这里用几句话来描述。想象一下,我想为不同的度量声明不同的类型,这样 Haskell 类型系统会在我的公式中发现错误:

newtype Dist = Km Float
newtype Time = H Float
newtype Velocity = KmH Float

(/) :: Dist → Time → Velocity
(Km d) / (H t) = KmH (d / v)

(*) :: Velocity → Time → Dist
(KmH v) * (H t) = Km (v * t)

所以,每当我试图在我的公式中使用错误的度量单位时,编译器都会咬人。

问题是我不能像这样实现临时多态性。使用这段代码,我带来了歧义——编译器可以区分我的运算符 * 和 Prelude 中定义的那个。声明 Num 类的实例也是不可能的,因为我需要不同类型的参数。

我想知道人们通常如何解决这个问题。

提前致谢!

最佳答案

如果需要,您可以隐藏通常的 (*),通过

import Prelude hiding((*))

或者隐藏所有的 Num
import Prelude hiding(Num(..))

然后你可以定义你自己的乘法,可能沿着线
class Mul a b c | a b -> c, b c -> a, c a -> b where
(*) :: a -> b -> c

关于haskell - Haskell中不同类型的乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5317628/

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