我想写
class Described a where
describe :: a -> String
instance {-# OVERLAPPING #-} (Show a) => Described a where
describe = show
instance {-# OVERLAPPABLE #-} (Typeable a) => Described a where
describe = show . typeOf
这将无效,因为每个实例的右侧相同。我认为可以通过看看https://wiki.haskell.org/GHC/AdvancedOverlap来解决,但似乎我需要为许多现有类型定义实例才能使这些解决方案中的任何一个起作用。什么是最好的解决方案?
答案 0 :(得分:0)
指导实例选择的标准技巧是创建新类型。所以:
[UNIVERSAL 24]
现在,调用者可以选择自己喜欢的描述类型(如果两者都可用),并且数据类型可以明确表示他们希望对其字段可用的描述类型,从而消除任何魔力。