我是Haskell的新手,所以我的问题可能很愚蠢。
我想要一个功能
show2 :: (Show a) => a -> String
这将返回任何
show a
的a
,但如果a本身是a
,则返回String
。我该如何实现?
P.S.如果已经在某个地方实现了此功能,那就太好了,但是我仍然想看看实现的一个例子。
最佳答案
您可以使用这段肮脏而危险的代码来做到这一点:
class Showable a where
show2 :: a -> String
instance Showable String where
show2 = id
instance (Show a) => Showable a where
show2 = show
您需要
-XOverlappingInstances -XFlexibleInstances -XUndecidableInstances
进行编译和使用。*Main> show2 "abc"
"abc"
*Main> show2 3
"3"
关于Haskell类的instanceof?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29284765/