haskell中派生和实例之间的区别

时间:2017-11-11 00:17:58

标签: haskell

我有一个类型,我已经创建了Show类的实例,但我没有得到所需的结果。如果我尝试使用deriving单词使其成为show class的实例,那么它可以工作但是如果尝试:

instance Show (SomeValue v) where
  show (Null) = "You have no value"
  show (Justs v) = show (Justs v)

findKey key = foldr (\(k,v) acc -> if key == k then Justs v else acc ) Null 

它进入一个无限循环(种类)。我认为默认实现可以通过使用deriving字来解决上述代码的错误吗?它编译但不打印任何东西。

我可以打印这样的值:(没有" Justs")?

instance Show (SomeValue v) where
  show (Null) = "You have no value"
  show (Justs v) = show (v)

1 个答案:

答案 0 :(得分:3)

代码

show (Justs v) = show (Justs v)

出于同样的原因进入无限循环

f x = f x

确实

您可以根据要求在没有Justs的情况下编写它,您只需要对实例进行约束


instance (Show v) => Show (SomeValue v) where
    show Null = "You have no value"
    show (Justs v) = show v

因为如果您要尝试展示vv应该可以展示,不是吗?