計算機科学のブログ

実践Haskell Monad型クラス HaskellのエラーとEither型 head関数、部分関数、エラー head関数と部分関数

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

それぞれ空のリスト、最大値がある型の最大値、数値の無限リスト。1番目と2番目はエラー(exception)で、3番目はエラーではなく計算が終わらないという失敗。

実際にGHCiで確認。

入出力結果(Terminal, Zsh)

% ghci
GHCi, version 8.10.7: https://www.haskell.org/ghc/  :? for help
macro 'doc' overwrites builtin command.  Use ':def!' to overwrite.
(0.00 secs, 0 bytes)
(0.00 secs, 0 bytes)
Loaded GHCi configuration from /Users/…/.ghc/ghci.conf
Prelude
λ> maximum []
*** Exception: Prelude.maximum: empty list
Prelude
λ> succ maxBound :: Int
*** Exception: Prelude.Enum.succ{Int}: tried to take `succ' of maxBound
Prelude
λ> succ maxBound :: Char
*** Exception: Prelude.Enum.Char.succ: bad argument
Prelude
λ> sum [1..]
^CInterrupted.
Prelude
λ> :quit
Leaving GHCi.
%