計算機科学のブログ

Haskell - 型によるプログラミング - パラメータ化された型 - Triple型、Box型、map関数

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)の UNIT3(型によるプログラミング)、LESSON 18(パラメータ化された型)、18.14(練習問題)、Q18-1の解答を求めてみる。

コード

sample.hs

import Data.Char (toUpper)
main :: IO ()
main = do
    print b
    print $ boxMap toUpper b
    print t
    print $ tripleMap toUpper t


data Triple a = Triple a a a deriving Show
tripleMap :: (a -> b) -> Triple a -> Triple b
tripleMap func (Triple x y z) = Triple (func x) (func y) (func z)

data Box a = Box a deriving Show
boxMap :: (a -> b) -> Box a -> Box b
boxMap func (Box x) = Box (func x)

b :: Box Char
b = Box 'a'
t :: Triple Char
t = Triple 'a' 'b' 'c'

入出力結果(Terminal, Zsh)

% runghc sample.hs 
Box 'a'
Box 'A'
Triple 'a' 'b' 'c'
Triple 'A' 'B' 'C'
%