我是Haskell的新手,所以我的问题可能很愚蠢。

我想要一个功能

show2 :: (Show a) => a -> String

这将返回任何show aa,但如果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/

10-11 22:34