我有一个类型,我已经创建了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)
答案 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
因为如果您要尝试展示v
,v
应该可以展示,不是吗?