Haskellには、エスケープシーケンスを使用するstring literalsという番号があります。例えば、\n
,\t
,\NUL
などが挙げられる。ハスケル: "\ 0"を " 0"にするには?
私は、文字列リテラルがある場合:他のすべての文字列リテラルのエスケープシーケンスで
"Newline: \n Tab: \t"
と同じ:私は上記の文字列を変換する関数escape :: String -> String
を定義しない方法
let s = "Newline: \\n Tab: \\t"
を。
Quasi QuotingとTemplate Haskellを使用しても問題ありませんが、結果を得るためにそれらを使用する方法はわかりません。すべてのポインタ?
更新:私はちょうど基本ライブラリに含まれているText.ParserCombinators.ReadPモジュールを見つけました。それは私が欲しいことを行うData.CharのreadLitChar :: ReadS Char
関数をサポートしていますが、ReadPモジュールの使い方はわかりません。私は以下を試してみました:
escape2 [] = []
escape2 xs = case readLitChar xs of
[] -> []
[(a, b)] -> a : escape2 b
これは、ReadPモジュールを使用する正しい方法ではないかもしれません。誰でもいくつかのポインタを提供できますか?
別のアップデート:ありがとうございました。私の最後の機能は以下の通りです。悪くはないと思います。
import Text.ParserCombinators.ReadP
import Text.Read.Lex
escape xs
| [] <- r = []
| [(a,_)] <- r = a
where r = readP_to_S (manyTill lexChar eof) xs
多分あなたはHaskellの-SRC(http://hackage.haskell.org/を使用することができますが生成さそれはおそらく残念です... 更新:多分( "(" \ "++ s ++" \ "")):: String –