约束中的非类型变量参数:Enum A => Ord A
Non type-variable argument in the Constraint: Enum A => Ord A
我是 Haskell 的新手。
我想使用 Enum class 为自定义数据类型实现 Ord class class。
如果我实现 Enum class 并在 [=24] 的实现中直接使用 fromEnum 函数就可以正常工作=]compare Ord class.
所需的函数
但由于类型签名和类型级别约束用于可读性和文档。我想在 Enum 实例上指定自定义数据 depends 的 Ord 实例。
当我写下面的代码时,它会抛出一个错误。
data DayOfWeek
= Mon | Tue | Weds | Thu | Fri | Sat | Sun
deriving (Eq, Show)
instance Enum DayOfWeek => Ord DayOfWeek where
compare a b = compare (fromEnum a) (fromEnum b)
instance Enum DayOfWeek where
toEnum 1 = Mon
toEnum 2 = Tue
toEnum 3 = Weds
toEnum 4 = Thu
toEnum 5 = Fri
toEnum 6 = Sat
toEnum 7 = Sun
fromEnum Mon = 1
fromEnum Tue = 2
fromEnum Weds = 3
fromEnum Thu = 4
fromEnum Fri = 5
fromEnum Sat = 6
fromEnum Sun = 7
错误:
* Non type-variable argument in the constraint: Enum DayOfWeek
(Use FlexibleContexts to permit this)
* In the context: Enum DayOfWeek
While checking an instance declaration
In the instance declaration for `Ord DayOfWeek'
我们可以写具体类型的约束吗
如果我们启用一对扩展,您的代码将编译,在文件的第一行写入:
{-# LANGUAGE FlexibleContexts, UndecidableInstances #-}
不过,我认为这不值得。我会删除上下文,因为这是大多数现有代码所做的。
此外,我不确定为什么您认为记录一个实例依赖于另一个实例这一事实很重要。我会将其视为实现细节,因此我想对用户隐藏,而不是指出来。
我是 Haskell 的新手。
我想使用 Enum class 为自定义数据类型实现 Ord class class。
如果我实现 Enum class 并在 [=24] 的实现中直接使用 fromEnum 函数就可以正常工作=]compare Ord class.
所需的函数但由于类型签名和类型级别约束用于可读性和文档。我想在 Enum 实例上指定自定义数据 depends 的 Ord 实例。 当我写下面的代码时,它会抛出一个错误。
data DayOfWeek
= Mon | Tue | Weds | Thu | Fri | Sat | Sun
deriving (Eq, Show)
instance Enum DayOfWeek => Ord DayOfWeek where
compare a b = compare (fromEnum a) (fromEnum b)
instance Enum DayOfWeek where
toEnum 1 = Mon
toEnum 2 = Tue
toEnum 3 = Weds
toEnum 4 = Thu
toEnum 5 = Fri
toEnum 6 = Sat
toEnum 7 = Sun
fromEnum Mon = 1
fromEnum Tue = 2
fromEnum Weds = 3
fromEnum Thu = 4
fromEnum Fri = 5
fromEnum Sat = 6
fromEnum Sun = 7
错误:
* Non type-variable argument in the constraint: Enum DayOfWeek
(Use FlexibleContexts to permit this)
* In the context: Enum DayOfWeek
While checking an instance declaration
In the instance declaration for `Ord DayOfWeek'
我们可以写具体类型的约束吗
如果我们启用一对扩展,您的代码将编译,在文件的第一行写入:
{-# LANGUAGE FlexibleContexts, UndecidableInstances #-}
不过,我认为这不值得。我会删除上下文,因为这是大多数现有代码所做的。
此外,我不确定为什么您认为记录一个实例依赖于另一个实例这一事实很重要。我会将其视为实现细节,因此我想对用户隐藏,而不是指出来。