計算機科学のブログ

実践Haskell HaskellのエラーとEither型 Monad、<$>演算子、<*>演算子

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT7(実践Haskell)、LESSON 38(HaskellのエラーとEither型)、38.3(Either型)、クイックチェック 38-3の解答を求めてみる。

コード

palindrome-checker/app/Main.hs

module Main (main) where

import Lib (eitherHead)

intExample :: [Int]
intExample = [1, 2, 3]

main :: IO ()
main = do
  print $
    (+)
      <$> eitherHead intExample
      <*> eitherHead (tail intExample)

palindrome-checker/src/Lib.hs

module Lib
  ( eitherHead,
  )
where

eitherHead :: [b] -> Either String b
eitherHead [] = Left "There si no head because the list is empty"
eitherHead (x : _) = Right x

入出力結果(Terminal, Zsh)

% stack exec palindrome-checker-exe
Right 3
%