Haskell,参数化数据类型转换为String

时间:2012-10-21 22:59:06

标签: haskell functional-programming

这是我的数据类型:

data Foo a =  Value Integer
           |Boo a

我有一个将Foo数据类型转换为String的函数:

showFoo::Show a=> Foo a -> String
showFoo (Value n) = show n
showFoo (Boo a) = show a

例如:showFoo(值10)变为:“10”,但对于showFoo(Boo“S”),它变为:“\”S \“”但我只需要“S”。

2 个答案:

答案 0 :(得分:4)

这归结为show带字符串的行为。 show旨在提供机器可读的输出,它不是一台漂亮的打印机, 所以它在所有字符串中放置了引号。这样它可以告诉 10"10"之间的区别,当它正在读回来时。

您的showFoo功能显然不属于show系列, 因为它删除了ValueBoo标记,所以使用show并不是真的 你的意思是。

可能的解决方案:

  1. 放弃,全力以赴,派生Show
  2. 如果a始终是字符串,请更改您的数据类型,不要使用show
  3. 了解更多类型类并定义自己的Showish类。 使用-XFlexibleInstances-XOverlappingInstances覆盖 String的实例,不要使用引号。
  4. 使用init.tail.show $ a
  5. 破解它

答案 1 :(得分:1)

这只是你使用GHCi的结果,它显示了之前的结果。在已编译的程序中尝试此操作或尝试运行(在GHCi中)putStrLn (showFoo (Boo "S")),您将看到在字符串上调用show会产生一组引号。