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

IOMcn型: 普通の関数をつなぐ

(工事中 60%)

はじめに

IOMcn型の機械は(>>>)で次々とつないでいける。

m1 >>> m2 >>> m3 >>> m4 >>> ...

途中に普通の関数をはさみたいことがある。たとえば入力された文字列を逆順にして表示するようなときには、getLineとputLineのあいだに関数reverseをはさみたくなる。このようなときには関数reverseを機械に変換すればいい。

関数arr

モジュールIOMcnには関数arrが用意されている。

arr :: (a -> b) -> IOMcn a b

関数arrは普通の関数を機械に変換する。たとえば

arr reverse

は文字列を入力するとそれを逆順にして出力する機械になる。ユーザがうちこんだ文字列を逆順にしてコンソールに表示する機械は

getLine >>> arr reverse >>> putLine

となる。対話環境で試してみよう。

% ghci IOMcn.hs
*IOMcn> runIOMcn $ getLine >>> arr reverse >>> putLine
(適当に入力ここではhello)hello
olleh

値を入力する

関数がIOMcnに変換できるということは値を機械に流しこめるということだ。文字列"Hello"を機械に流しこむには

arr (const "Hello") >>> putLine

とする。引数を無視して"Hello"を返す関数を機械に変換する。入力値を無視して"Hello"を出力する機械となる。Machine型のときに見た機械putHello, putWorldは

putHello, putWorld :: IOMcn () String
putHello = arr (const "Hello") >>> putLine
putWorld = arr (const "World") >>> putLine

と定義できる。対話環境で試してみよう。

*IOMcn> runIOMcn $ arr (const "Hello") >>> putLine
Hello
*IOMcn> runIOMcn $ arr (const "World") >>> putLine
World

まとめ

機械と普通の関数をつなぎたいときがある。そのようなときには

arr :: (a -> b) -> IOMcn a b

を使って普通の関数を機械に変えてやればいい。

「IOMcn型: 導入」へもどる 「IOMcn型: 秒針の偶奇であいさつを変える」へ

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