1. ホーム
  2. parsing

[解決済み] HaskellのPrelude.readはなぜMaybeを返さないのですか?

2022-10-03 06:15:37

質問

Prelude.read の型が

read :: Read a => String -> a

を返すのではなく Maybe の値を返すのでしょうか?

read :: Read a => String -> Maybe a

この文字列はHaskellでパースできないかもしれないので、後者の方が自然ではないでしょうか?

あるいは Either String a であっても Left はパースされないと元の文字列を含むことになり Right はパースされた場合の結果を含むのでしょうか?

編集してください。

他の人に対応するラッパーを書いてもらおうとは思っていません。ただ、そうすることが安全であるという安心感を求めているだけです。

どのように解決するのですか?

編集 : GHC 7.6にて。 readMaybe が利用できるようになりました。 Text.Read モジュールと一緒に、基本パッケージの readEither : http://hackage.haskell.org/packages/archive/base/latest/doc/html/Text-Read.html#v:readMaybe


素晴らしい質問です! 読み取りのタイプ自体は、すぐに変更されることはありません。しかし があります。 maybeRead 関数でなければなりません。

なぜないのでしょうか?その答えは、"inertia"です。そこには の議論がありました。 という議論がありましたが、これは「失敗」についての議論で脱線しました。

良い知らせは、人々が十分に納得して、ライブラリの fail からの移行を開始したことです。悪い知らせは、その提案がどさくさに紛れて失われてしまったことです。そこで はそのような関数であるべきですが、1つは書くのが簡単です (そして、多くのコードベースには非常に似たようなバージョンが何十億と浮かんでいます)。

参照 この議論 .

個人的には 安全なパッケージ .