2017-03-05 11 views
16

なぜ引数が解析できないときに関数readが実行ファイルを終了するのですか?`read`関数に代わる完全な方法はありますか?

は、文字列がタイプaに解析できなかった場合Nothingを返すタイプString -> Maybe aの機能を持っている方が便利だろうと私には思えるが、私はそれのような何かを見つけることができません。私は何が欠けていますか?

+0

私はHaskellについてよく分かりませんが、 'read'関数がどのように純粋であるのか理解できません。定義上*重要な*副作用があります。 –

+10

@BasileStarynkevitch 'read'は入力から読み込みません。その引数を 'String'(Python' __str__'メソッドのように)に変換するだけです。 – chepner

+0

Prelude( 'head'と' tail'を含む)のいくつかの関数の一つですが、これは総計されている可能性がありますが、単純化のために部分関数として定義されています。 – chepner

答えて

23

あなたが探している機能がreadMaybeと呼ばれ、モジュールText.Readに定義されています。

https://hackage.haskell.org/package/base-4.9.1.0/docs/Text-Read.html#v:readMaybe

これは、GHC 7.6以降で使用可能です。その前に、readsを呼び出す必要がありました。これは、解析された値のリスト(可能性としては空の)を返し、パターンの一致を返します。

+1

Preludeに 'readMaybe'を追加しました。[最近ライブラリーメーリングリストに登録しました](https://mail.haskell.org/pipermail/library/2016-December/027496.html)。 – Alec

関連する問題