私がよく知っているほとんどの OO 言語ではtoString
、a のメソッドString
は実際には恒等関数にすぎません。しかし、Haskellshow
では二重引用符を追加します。
したがって、次のような関数を書くと
f :: Show a => [a] -> String
f = concat . map show
数値に対して期待どおりに機能します
f [0,1,2,3] -- "0123"
しかし、文字列は余分な引用符で終わります
f ["one", "two", "three"] -- "\"one\"\"two\"\"three\""
本当に欲しいとき"onetwothree"
。
ポリモーフィックに書きたい場合f
、制約のみで、String の Show インスタンスをオーバーライドせずにそれを行う方法はありShow
ますか (それが可能であれば)。
私が思いつく最善の方法は、独自の型クラスを作成することです。
class (Show a) => ToString a where
toString = show
すべてのインスタンスを追加しますか?
instance ToString String where toString = id
instance ToString Char where toString = pure
instance ToString Int
instance ToString Maybe
...etc