gpt4 book ai didi

haskell - 声明类型类的列表实例

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

我正在通过 UPENN Haskell lecture notes 学习 Haskell 类型类,用示例代码制作我自己的类型类:

class Listable a where
toList :: a -> [Int]

instance Listable Int where
toList x = [x]

instance Listable Bool where
toList True = [1]
toList False = [0]

它适用于 IntBool,但当我添加 [Int] 实例时,ghci 失败:

instance Listable [Int] where
toList = id

错误:

Illegal instance declaration for ‘Listable [Int]’

(All instance types must be of the form (T a1 ... an)

where a1 ... an are distinct type variables,

and each type variable appears at most once in the instance head.

Use FlexibleInstances if you want to disable this.)

In the instance declaration for ‘Listable [Int]’

我尝试了几次但都失败了:

toList x = id x
toList x = x
toList = \x -> x

我该如何解决这个问题?

最佳答案

只需在源文件顶部添加以下行

{-# LANGUAGE FlexibleInstances #-}

这将启用此形式的实例声明所需的 FlexibleInstances 扩展,因为 Haskell 98 不允许它们。

请注意,您还可以通过在调用 ghcghci 时添加 -XFlexibleInstances 标志来启用扩展,但它被视为这样做是不好的做法,因为它将启用所有模块的扩展。这也意味着您的程序只能根据传递给编译器的命令行标志来成功编译。这就是为什么最好在每个模块的基础上启用扩展,正如我上面所解释的。

关于haskell - 声明类型类的列表实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39292245/

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