gpt4 book ai didi

class - 在 Purescript 中为 NonEmpty 编写 Functor 实例与编写 Eq 实例

转载 作者:行者123 更新时间:2023-12-02 16:49:48 26 4
gpt4 key购买 nike

我目前正在通过阅读 Purescript by Example 来学习 Purescript书(到目前为止,我发现的唯一广泛涵盖该语言的资源之一)。

我正在尝试实现第 6.7 节(实例依赖项)中的练习,但我无法理解以下编译器错误:

enter image description here

我已经为数据类型 data NonEmpty a = NonEmpty a (Array a) 实现了 Semigroup 和 Eq 实例,如下所示:

instance eqNonEmpty :: Eq a => Eq (NonEmpty a) where
eq (NonEmpty h1 t1) (NonEmpty h2 t2) = h1 == h2 && t1 == t2


instance semigroupNonEmpty :: Semigroup (NonEmpty a) where
append (NonEmpty h1 t1) (NonEmpty h2 t2) = NonEmpty h1 (t1 <> [h2] <> t2)

但是当我尝试以同样的方式实现 Functor 实例时,我得到了上面的错误。似乎有效的是:

instance functorNonEmpty :: Functor NonEmpty where
map f (NonEmpty h t) = NonEmpty (f h) (map f t)

现在,这是为什么呢?我想不通。谢谢!

最佳答案

这就是 Functor 类的定义方式:它适用于采用参数的类型。因此,例如,Functor 类将应用于 MaybeList,但不适用于 IntString,同样不适用于 Maybe IntList String

NonEmpty 类型确实有一个参数,因为它是这样定义的:

data NonEmpty a = ...

但是 NonEmpty a 类型接受参数,无论a 可能是什么。

另一方面,类 EqSemigroup 需要一个没有任何参数的类型。因此这些类可以应用于 IntStringMaybe Boolean 以及任何其他没有参数的类型,包括 NonEmptya,不管 a 可能是什么。

关于class - 在 Purescript 中为 NonEmpty 编写 Functor 实例与编写 Eq 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59183067/

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