gpt4 book ai didi

haskell - 带有元组的新类型

转载 作者:行者123 更新时间:2023-12-01 08:57:57 25 4
gpt4 key购买 nike

关于此代码来自 LearnYouaHaskell :

newtype Pair b a = Pair {getPair :: (a,b)}
instance Functor (Pair c) where
fmap f (Pair (x, y)) = Pair (f x, y)

我知道第一行从元组创建了一个新的数据类型。但是,为什么参数的顺序从 Pair b a 切换到 getPair::(a,b) 呢?如果我切换其中一个顺序,则由于 fmap 的定义中的模式匹配而出现错误。

最佳答案

Functor 类需要一个类型参数,而 Pair 类型有两个。 Pair的实例定义:

instance Functor (Pair c) where ...

固定第一个类型参数,它对应于元组的第二个元素。这意味着 fmap 转换元组的第一个元素。如果 Pair 的类型参数是另一个顺序,您将转换第二个元组元素,并且定义必须更改为:

fmap f (Pair (x, y)) = Pair (x, f y)

注意对 Functor 的内置定义已经以这种方式运行,例如

import Data.Functor
fmap (+1) ("first", 3)

关于haskell - 带有元组的新类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186160/

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