我正在努力理解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可以防止x和y在doit中的混淆。
这是真的,还是我误会了?
发布于 2020-06-23 19:13:12
在+能够工作之前,您需要“打开”新类型。
doit :: X -> Y -> Double
doit (X x) (Y y) = x + y在这里,我使用模式匹配来打开每个参数内的Double。在这里,x和y都是Double,所以您可以用x + y添加它们。
https://stackoverflow.com/questions/62542093
复制相似问题