Haskell - 実践Haskell - HaskellのエラーとEither型 - Left, Right
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)の UNIT 7(実践Haskell)、LESSON 38(HaskellのエラーとEither型)、38.5(練習問題)、Q38-1の解答を求めてみる。
コード
sample4.hs
import Data.Char (isDigit)
main :: IO ()
main = do
print $ addStrInts "a" "b"
print $ addStrInts "a" "1"
print $ addStrInts "1" "b"
print $ addStrInts "1" "2"
print $ addStrInts "a1" "b2"
print $ addStrInts "a1" "1"
print $ addStrInts "1" "b2"
print $ addStrInts "12" "23"
addStrInts :: String -> String -> Either String Int
addStrInts x y | not (all isDigit x) = Left $ mconcat ["invaild value: ", x]
| not (all isDigit y) = Left $ mconcat ["invaild value: ", y]
| otherwise = Right $ read x + read y
入出力結果(Terminal, Zsh)
% runghc sample4.hs
Left "invaild value: a"
Left "invaild value: a"
Left "invaild value: b"
Right 3
Left "invaild value: a1"
Left "invaild value: a1"
Left "invaild value: b2"
Right 35
%