ReadSを使って失敗を考慮したread
文字列をIntとして読み出したい場合には、
> read "123" :: Int 123
で良いですが、失敗する場合に面倒。
> read "one-two-three" :: Int *** Exception: Prelude.read: no parse
文字列をIntとして読み出したい場合に失敗する可能性がある場合には
> let readi = reads :: ReadS Int
とInt読み出しに特化した関数を定義してやれば、
> readi "123" [(123,"")]
こんなん返ってきます。
Intとしてread出来ない場合には、
> readi "one-two-three" []
空リストが返ってきます。
>:m Data.Maybe > let readi = fmap fst . listToMaybe . reads :: String -> Maybe Int
定義すれば、成功時にJust Int,失敗時にNothingが返ってきます。
> readi "123" Just 123 > readi "one-two-three" Nothing
ここ参考にした。
かなりちまちまやってる感じ。
さらさら書けるようになりたい。
補足
> let readi = reads :: ReadS Int
この場合のreadiのシグネチャは、
> :t readi readi :: ReadS Int
であるので、ぱっと見関数に見えません。
何ですかこれは。
一旦終わり。