我知道 String 被定义为 [Char],但我想在类实例中对它们两者进行区分。除了使用 newtype 创建单独的类型之外,这是否可能通过一些巧妙的技巧来实现?我想做类似的事情:
class Something a where
doSomething :: a -> a
instance Something String where
doSomething = id
instance (Something a) => Something [a] where
doSomething = doSoemthingElse
当我用doSomething ("a" :: [Char])
and调用它时会得到不同的结果doSomething ("a" :: String)
。
我确实知道FlexibleInstances
,OverlappingInstances
但他们显然没有解决这个问题。