Haskell 我可以在GHCi中添加实例声明吗

Haskell 我可以在GHCi中添加实例声明吗,haskell,ghc,typeclass,ghci,Haskell,Ghc,Typeclass,Ghci,我在乱搞HashMap,试图使用Data.Bson.ObjectId作为键。一、 当然,我们发现该结构没有可哈希的实例。没关系,因为写一个是很琐碎的 我在GHCi中输入了这一行,并被告知“输入'instance'时出现解析错误”。这实际上是有意义的,因为GHCi提示符的操作就好像这些行被键入IO monad中的do块中一样,并且无法在此上下文中定义实例 那么,我的问题是,有没有办法在GHCi中定义一个新实例 1为什么图书馆不提供此实例是另一回事。我相信答案是限制依赖性,除了bson包已经依赖于

我在乱搞
HashMap
,试图使用
Data.Bson.ObjectId
作为键。一、 当然,我们发现该结构没有可哈希的
实例。没关系,因为写一个是很琐碎的

我在GHCi中输入了这一行,并被告知“输入'instance'时出现解析错误”。这实际上是有意义的,因为GHCi提示符的操作就好像这些行被键入IO monad中的do块中一样,并且无法在此上下文中定义实例

那么,我的问题是,有没有办法在GHCi中定义一个新实例



1为什么图书馆不提供此实例是另一回事。我相信答案是限制依赖性,除了bson包已经依赖于太阳下的一切。

好消息:是的,有一种方法可以在GHCi中定义新实例

坏消息:目前,第一步是“安装GHC的开发快照”

这是GHCi在相当长一段时间内明显缺少的一点功能。它不存在并没有内在的原因,但我认为它有点难以实现,所以它被搁置了

然而,似乎:

在GHCi提示下,您还可以输入任何顶级Haskell声明,包括数据、类型、新类型、类、实例、派生和外部声明。例如:

Prelude> data T = A | B | C deriving (Eq, Ord, Show, Enum)
Prelude> [A ..]
[A,B,C]
Prelude> :i T
data T = A | B | C      -- Defined at <interactive>:2:6
instance Enum T -- Defined at <interactive>:2:45
instance Eq T -- Defined at <interactive>:2:30
instance Ord T -- Defined at <interactive>:2:34
instance Show T -- Defined at <interactive>:2:39
Prelude>data T=A | B | C派生(等式、命令、显示、枚举)
序曲>[A..]
[甲、乙、丙]
序曲>:i T
数据T=A | B | C——定义为:2:6
实例枚举T--定义时间:2:45
实例Eq T——定义时间:2:30
实例Ord T——定义时间:2:34
实例Show T——定义时间:2:39
您是否认为现在就拥有它值得安装GHC的非发布版本由您决定

Prelude> data T = A | B | C deriving (Eq, Ord, Show, Enum)
Prelude> [A ..]
[A,B,C]
Prelude> :i T
data T = A | B | C      -- Defined at <interactive>:2:6
instance Enum T -- Defined at <interactive>:2:45
instance Eq T -- Defined at <interactive>:2:30
instance Ord T -- Defined at <interactive>:2:34
instance Show T -- Defined at <interactive>:2:39