2017-10-04 3 views
2

私は最近ハスケルを学び始め、何かを小文字に変換したいと考えました。私は "toLower"という機能を調べましたが、うまくいかないようです。HaskellでtoLowerを正しく使うにはどうすればいいですか?

Prelude> import Data.Text 
Prelude Data.Text> toLower "JhELlo" 

<interactive>:2:9: error: 
    * Couldn't match expected type `Text' with actual type `[Char]' 
    * In the first argument of `toLower', namely `"JhELlo"' 
     In the expression: toLower "JhELlo" 
     In an equation for `it': it = toLower "JhELlo" 
Prelude Data.Text> toLower 'JhELlo' 

<interactive>:3:9: error: 
    * Syntax error on 'JhELlo' 
     Perhaps you intended to use TemplateHaskell or TemplateHaskellQuotes 
    * In the Template Haskell quotation 'JhELlo' 
Prelude Data.Text> 

答えて

4

あなたが使用しようとしたバージョンがText、およびないStringで動作するので、動作しません。それらは2つの異なるタイプです。この時点で2つのオプションがあります。

1)Data.ChartoLowerを使用してください。 )

map toLower "JhELlo" 

2)もし文字列がData.Textに変換(および必要に応じて再び:これは単一の文字で動作し、あなたの文字列の上にマッピングすることができ

unpack . toLower . pack $ "JhELlo" 

は約other versions of toLowerは実際にあります。 ; Data.Sequencesの1つはポリモーフィックなので(両方で動作するはずですが)、mono-traversableパッケージを依存関係として取得する必要があります。

+2

選択肢がある場合、 'Data.Text.toLower'は' Data.Char.toLower'よりも優先されるべきです。なぜなら、その動作は国際的なテキストではより正確だからです。たとえば、 'Data.Text.toLower"İ "=" i \ 775 "'(2つの出力コードポイント!)ですが、 'Data.Char.toLower"İ "=" i "'は近似に過ぎません。 –

関連する問題