計算機科学のブログ

Haskell - 型によるプログラミング - パラメータ化された型 - 引数をとる型

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

コード

sample1.hs

main :: IO ()
main = do
  print $ wrap (Box 'a') -- Box (Box 'a') :: Box (Box Char)

data Box a = Box a deriving Show

wrap :: a -> Box a
wrap x = Box x

unwrap :: Box a -> a
unwrap (Box a) = a

x :: Box (Box Char)
x = wrap (Box 'a')

入出力結果(Terminal, Zsh)

% runghc sample1.hs 
Box (Box 'a')
%