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

Machine型

(工事中 60%)

はじめに

動作を行うMachine型を考える。Machine型は関数nextでつないでいくことができる。「動作1をして動作2をして...」のようにつなぐことで求める動作を組みたてることができる。

何も考えずに

Machine.hs

Machine.hsをダウンロードしてカレントディレクトリに置くか、あるいは何も考えずに以下のコードを作成しよう。名前はMachine.hsとしておく。

module Machie (Machine, runMachine, next, putHello, putWorld) where

newtype Machine = Machine { runMachine :: IO () }

putHello, putWorld :: Machine
putHello = Machine $ putStrLn "Hello"
putWorld = Machine $ putStrLn "World"

next :: Machine -> Machine -> Machine
next (Machine m1) (Machine m2) = Machine $ m1 >> m2

このモジュールが何をしているのかは今は考えないようにしよう。とにかくこのモジュールがエクスポートしている型Machine, 関数runMachine, next, putHello, putWorldがはじめから存在しているとして考えることにする。

意味づけ

モジュールMachineをインポートした世界について考えよう。Machine型とその値putHelloとputWorldが存在する。Machine型の値は対話環境でrunMachineすると実行される。

試してみる

% ghci Machine.hs
*Machine> :m Machine
Prelude Machine> runMachine putHello
Hello
Prelude Machine> runMachine putWorld
World
Prelude Machine> runMachine $ putHello `next` putWorld
Hello
World

"Hello"を表示する機械putHelloと"World"を表示する機械putWorldがある。これらを関数nextでつないで"Hello"を表示したあとに"World"を表示する機械を作った。

まとめ

特定の文字列を表示する関数がありそれを次々につなげていく仕組みを作った。「これをして次にあれをして」という処理を行うことができる。

「入出力について」へもどる 「IOMcn型: 導入」へ

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