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'
%