gpt4 book ai didi

haskell - 使用 `newtype` 包装其他类型

转载 作者:行者123 更新时间:2023-12-05 08:30:47 27 4
gpt4 key购买 nike

我正在尝试理解 newtype 并认为这会起作用:

module NT where

newtype X = X Double
newtype Y = Y Double

doit :: X -> Y -> Double
doit x y = x + y

x = X 1.1
y = Y 2.2

-- doit x y should work
-- doit y x should error

产生的第一个错误是:

NT.hs:7:12: error:
• Couldn't match expected type ‘Double’ with actual type ‘X’
• In the expression: X x + Y y
In an equation for ‘doit’: doit x y = X x + Y y
|
7 | doit x y = X x + Y y
|

我知道类型不匹配,我只是不知道如何解决它。我认为像这样包装 Double 可以用来防止 doitxy 的混淆。

这是真的吗,还是我误会了?

最佳答案

您需要在 + 之前“解包”newtype可以工作。

doit :: X -> Y -> Double
doit (X x) (Y y) = x + y

在这里,我使用模式匹配来解包 Double在每个参数中。在这里,xy都是Double , 所以你可以用 x + y 添加它们.

关于haskell - 使用 `newtype` 包装其他类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62542093/

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