2

double のリストを文字列にフォーマットしようとしています。次のようなリストを作成したいと思います。

[0.38, 0.94]

次のようなものに:

"aString 0.380  0.940"

私が試してみました:

"aString" ++ map (printf "%7.3f") [0.38, 0.94]

フィードバックを得る:

<interactive>:80:19:
    No instance for (PrintfType Char)
      arising from a use of `printf'
    Possible fix: add an instance declaration for (PrintfType Char)
    In the first argument of `map', namely `(printf "%7.3f")'
    In the second argument of `(++)', namely
      `map (printf "%7.3f") [0.38, 0.94]'
    In the expression: "aString" ++ map (printf "%7.3f") [0.38, 0.94]

これを修正できませんでした。機能する署名を作成できませんでした。

ありがとうございました

4

1 に答える 1

12

問題は、それmap (printf "%7.3f") [0.38, 0.94]がタイプ[String]ではなく、タイプであることStringです。使用concatMap:

Prelude Text.Printf> "aString" ++ concatMap (printf "%7.3f") [0.38, 0.94]
"aString  0.380  0.940"
于 2013-05-02T14:13:40.683 に答える