首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正确的新型定义

正确的新型定义
EN

Stack Overflow用户
提问于 2015-04-27 12:51:07
回答 2查看 152关注 0票数 3

我想知道为什么下面是对类型的正确实现。具体来说,为什么Pair b a而不是Pair a b

代码语言:javascript
运行
复制
newtype Pair b a = Pair { getPair :: (a,b) } 

澄清一下,Pair a b不适用于以下方面:

代码语言:javascript
运行
复制
instance Functor (Pair c) where  
fmap f (Pair (x,y)) = Pair (f x, y) 

我不明白为什么。

除了下面的许多很好的答案之外,我发现在ghci中做以下工作很有帮助:

代码语言:javascript
运行
复制
*Main> newtype Pair b a = Pair (a, b) deriving (Show, Eq)
*Main> :t Pair(True, "cat")
Pair(True, "cat") :: Pair [Char] Bool

*Main> newtype Pair a b = Pair (a, b) deriving (Show, Eq)
*Main> :t Pair(True, "cat")
Pair(True, "cat") :: Pair Bool [Char]
EN

Stack Overflow用户

发布于 2015-04-27 12:52:06

newtype Pair a bnewtype Pair b a都是正确的(就像它们键入check一样)。在后一种情况下,第二种元素的类型是第一种,这有悖于直觉,尽管它在用例中可能更合适。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29896327

复制
相关文章

相似问题

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