首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“`newtype`”包装其他类型

使用“`newtype`”包装其他类型
EN

Stack Overflow用户
提问于 2020-06-23 19:10:16
回答 1查看 86关注 0票数 2

我正在努力理解newtype,并认为这是可行的:

代码语言:javascript
复制
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

产生的第一个错误是:

代码语言:javascript
复制
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可以防止xydoit中的混淆。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-23 19:13:12

+能够工作之前,您需要“打开”新类型。

代码语言:javascript
复制
doit :: X -> Y -> Double
doit (X x) (Y y) = x + y

在这里,我使用模式匹配来打开每个参数内的Double。在这里,xy都是Double,所以您可以用x + y添加它们。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62542093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档