計算機科学のブログ

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

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

コード

palindrome-checker/app/Main.hs

module Main (main) where

import Lib (myTakePM)

main :: IO ()
main = do
  mapM_
    (\n -> print $ myTakePM n [1 .. 5])
    [-2 .. 2]

palindrome-checker/src/Lib.hs

module Lib
  ( myTakePM,
  )
where

myTakePM :: Int -> [Int] -> [Int]
myTakePM 0 _ = []
myTakePM n (x : xs) = x : myTakePM (n - 1) xs
myTakePM _ [] = []

入出力結果(Terminal, Zsh)

% stack exec palindrome-checker-exe\
> 
[1,2,3,4,5]
[1,2,3,4,5]
[]
[1]
[1,2]
%