リストの先頭要素を取得するPreludeのhead関数は、空リストを与えると失敗します。 「1要素以上なら必ず成功する」という大半の状況でうまくいく処理のためにエラーハンドリングをするのはめんどくさいですし、エラーの可能性を残すというのは不安です。現状では必ず1要素以上のリストが渡されるけど、将来もしもここの箇所に0要素で来たら落ちるかもしれないからエラーハンドリングしておこう、という、現状では無駄なコードを書くことになるかもしれません。 この問題へのアプローチとして、「必ず1要素以上が入ることが保証されたリスト」を定義することで、エラーハンドリングすらさせない、というものが考えられます。 以下はHaskellで書いたものです。 type NeverEmptyList a = (a, [a]) front :: NeverEmptyList a -> a front xs = fst xs