gpt4 book ai didi

class - 非法实例声明

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

我刚刚用 Haskell 创建了一个类,但是我的一个实例有问题。我创建了这个类:

class Symbol a where
nameSym :: a -> String

还有这些实例:

instance Symbol Double where
nameSym db = show db

instance Symbol String where
nameSym str = str

但在编译时,我收到以下错误消息:

Illegal instance declaration for `Symbol String'
(All instance types must be of the form (T t1 ... tn)
where T is not a synonym.
In the instance declaration for `Symbol String'

你知道是什么问题吗?

最佳答案

问题在于 String[Char] 的类型别名,而 Haskell 98 规范不允许在类型别名上定义实例。这可以通过在文件头中添加这个来解决:

{-# LANGUAGE TypeSynonymInstances #-}

但是,这仍然不允许您编译程序,因为 Haskell 98 也不允许 [SomeConcreteType] 的实例(仅 [a] 的实例是允许的——感谢 Ørjan 指出了这一点),虽然在 Haskell 98 中存在一种不使用语言编译指示的解决方法,但解决这个问题的最简单方法(而且它也是完全安全和惯用的)是添加以下杂注:

{-# LANGUAGE FlexibleInstances #-}

— 这也启用了 TypeSynonymInstances,因此您不需要同时保留两个 pragma。

关于class - 非法实例声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33357033/

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