handleReplace
タイプのHaskellに関数があります
handleReplace :: Character -> T.Text -> T.Text
T は、修飾されたインポートとしての Data.Text モジュールです。したがって、この関数は、次のように定義された Character 型を受け取ります。
data Character = Character (String, String, String, String) [(String,String)] Case String Stringderiving (Read, Show)
およびテキスト値。文字列タプルのリストのみを考慮し、タプルの最初の項目のすべての出現を Data.Text 文字列のタプルの 2 番目の項目に置き換えようとし、そのタプルのリストのすべての要素を置き換えます。1 つの例外は、置換される出現箇所が で始まる単語内にある場合です/
。私は次のように関数を定義しました:
handleReplace :: Character -> T.Text -> T.Text
handleReplace (Character _ [] _ _ _) s = s
handleReplace (Character _ ((a, b):xs) _ _ _) s = handleReplace emptyCharacter string
where emptyCharacter = Character ([], [], [], []) xs Normal [] []
string = T.unwords $ map (\ x
-> if (T.head x) == '/'
then x
else T.replace (T.pack a) (T.pack b) s
) $ T.words s
残念ながら、それは機能しません。エラーはスローされませんが、期待される出力が得られません。実行時
handleReplace (Character ([],[],[],[]) [("u","U"),("v","wv")] Normal [] []) $ T.pack "/uu v uu vvuu"
私はそれが(明らかにテキスト型として)返されることを期待しています"/uu wv UU wvwvUU"
が、ghciでそれを試すと、次のようになります:
"/uu /UU /uu /UU wv UU wvwvUU /UU wv UU wvwvUU /UU wv UU wvwvUU ...
など なぜですか?