【发布时间】:2015-05-30 20:11:49
【问题描述】:
我是 Haskell 的新手,所以我的问题可能很愚蠢。
我想要一个函数
show2 :: (Show a) => a -> String
对于任何a,它将返回show a,但如果a 本身是String,则返回a。
如何实现?
附:如果这个功能已经在某个地方实现了,那就太好了,但我还是想看一个实现的例子。
【问题讨论】:
-
这通常是个坏主意,因为它的价值。
-
顺便说一句,您可能已经知道这一点,但由于您是新手:
=>之前的部分称为上下文(在您的情况下为Show a)。由于那里只有一个,因此您不必使用括号。 -
@LouisWasserman 你能解释一下,为什么?
-
@Hindsight 通常不建议在 Haskell 中执行任何类型的反射逻辑; “特定类型的例外”等不受欢迎。
-
@Hindsight why 不受欢迎的原因是 parametricity 已被发现是代码拥有的极其有价值的属性;这是一个想法,如果你的函数在某个类型变量中是多态的,那么它统一以相同的方式处理所有类型。这往往会使代码更加可重用、可组合且易于推理。
标签: haskell instanceof