top page > computer > haskell > web_lecture > for_programmer > value_const_as_fun.html
更新日:
文責: 重城良国

関数としての値構築子

値構築子の例

cells.hs

VisiCalc、Lotus 1-2-3、KSpreadなどの表計算ソフトでは

ウィキペディア: 表計算ソフト

[KSpreadのスクリーンショット]

セルをアルファベットと数字で表現する。実際には複数のアルファベットが使われるがここではアルファベット1文字で表現する。

data Cell = Cell Char Int deriving Show

% ghci cells.hs
*Main> Cell 'B' 3
Cell 'B' 3
*Main> Cell 'A' 7
Cell 'A' 7
*Main> :t Cell 'A' 7
Cell 'A' 7 :: Cell

値構築子Cellの型

Cell 'A' 7という表現は関数Cellに引数'A'と7を与えている。値構築子Cellは文字と整数値をとり型Cellの値を返す関数とみなせる。

*Main> :t Cell
Char -> Int -> Cell

Cellは普通の関数と同じように扱える。関数合成することもできる。

*Main> :m + Data.Char
*Main Data.Char> (Cell . toUpper) 'a' 3
Cell 'A' 3

部分適用もできる。

*Main Data.Char> let cellA = Cell 'A'
*Main Data.Char> cellA 3
Cell 'A' 3

値構築子はパターン構築子だ

値構築子はパターンも作る。

column :: Cell -> Char
column (Cell c _) = c

row :: Cell -> Int
row (Cell _ r) = r

cell1 :: Cell
cell1 = Cell 'A' 8

*Main Data.Char> :reload
*Main Data.Char> column cell1
'A'
*Main Data.Char> row cell1
8

値の作成と分解

値構築子は関数でもありパターン構築子でもある。関数としての値構築子はその型の値を作成する。パターン構築子としては値をその構成要素に分解する。

まとめ

値構築子は関数でもありパターン構築子でもある。値を作成したり分解したりすることができる。

課題

  1. 与えられた文字を大文字にしてJust値として返す関数を関数合成で書け

「点は点だ」へもどる 「値構築演算子」へ

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics