型によるプログラミング パラメータ化された型 mapと同様の関数の実装
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT3(型によるプログラミング)、LESSON 18(パラメータ化された型)、18.4(練習問題)Q18-1の解答を求めてみる。
コード
data Triple a = Triple a a a deriving Show
data Box a = Box a deriving Show
tripleMap :: (a -> b) -> Triple a -> Triple b
tripleMap func (Triple x y z) = Triple (func x) (func y) (func z)
boxMap:: (a -> b) -> Box a -> Box b
boxMap func (Box x) = Box (func x)
t :: Triple Integer
t = Triple 1 2 3
b :: Box Integer
b = Box 2
f :: Integer -> Double
f n = fromInteger (2 * n)
入出力結果(Terminal, Zsh)
% ghci
GHCi, version 8.10.5: 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 /.../.ghc/ghci.conf
Prelude
λ> :load sample1.hs
[1 of 1] Compiling Main ( sample1.hs, interpreted )
Ok, one module loaded.
(0.06 secs,)
*Main
λ> t
Triple 1 2 3
it :: Triple Integer
(0.01 secs, 72,584 bytes)
*Main
λ> tripleMap f t
Triple 2.0 4.0 6.0
it :: Triple Double
(0.00 secs, 78,928 bytes)
*Main
λ> b
Box 2
it :: Box Integer
(0.00 secs, 63,704 bytes)
*Main
λ> boxMap f b
Box 4.0
it :: Box Double
(0.01 secs, 66,688 bytes)
*Main
λ> :quit
Leaving GHCi.
%