Haskell による Hello,World
module Hello where
greeting :: String -> String
greeting name = “Hello, ” ++ name
main :: IO ()
main = do
putStrLn $ greeting “World”
8.
Frege による Hello,World
module Hello where
greeting :: String -> String
greeting name = “Hello, ” ++ name
main :: [String] -> IO ()
main args = do
putStrLn $ greeting “World”
ST (State Transformer)モナド
● 破壊的更新を局所化できる
● ST s TypeName
○ s は「観測不可能」な内部状態
○ s は常に型変数で、アクセスできない
● 純粋な値を取り出せる
○ IO モナドでは取り出せない
36.
ミュータブルなクラス
data JBuilder =
nativejava.lang.StringBuilder where
native new :: String
-> ST s (Mutable s JBuilder)
native append :: Mutable s JBuilder
-> String
-> ST s (Mutable s JBuilder)
37.
ミュータブルなクラス
data JBuilder =
nativejava.lang.StringBuilder where
native new :: String
-> ST s (Mutable s JBuilder)
native append :: Mutable s JBuilder
-> String
-> ST s (Mutable s JBuilder)
入出力なしなら native のみ
38.
ミュータブルなクラス
data JBuilder =
nativejava.lang.StringBuilder where
native new :: String
-> ST s (Mutable s JBuilder)
native append :: Mutable s JBuilder
-> String
-> ST s (Mutable s JBuilder)
直接アクセス不可能な「状態」
39.
ミュータブルなクラス
data JBuilder =
nativejava.lang.StringBuilder where
native new :: String
-> ST s (Mutable s JBuilder)
native append :: Mutable s JBuilder
-> String
-> ST s (Mutable s JBuilder)
Mutable s でラップ
40.
ミュータブルなクラス
data JBuilder =
nativejava.lang.StringBuilder where
native new :: String
-> ST s (Mutable s JBuilder)
native append :: Mutable s JBuilder
-> String
-> ST s (Mutable s JBuilder)
戻り値は ST モナド
41.
ミュータブルなクラス
greeting :: String-> ST s String
greeting name = do
sb <- JBuilder.new “Hello, ”
sb.append name
sb.toString
pureFunc :: String -> String
pureFunc name = (greeting name).run
42.
ミュータブルなクラス
greeting :: String-> ST s String
greeting name = do
sb <- JBuilder.new “Hello, ”
sb.append name
sb.toString
pureFunc :: String -> String
pureFunc name = (greeting name).run
ST モナドとして使用
43.
ミュータブルなクラス
greeting :: String-> ST s String
greeting name = do
sb <- JBuilder.new “Hello, ”
sb.append name
sb.toString
pureFunc :: String -> String
pureFunc name = (greeting name).run
run で純粋な値を取り出す
44.
ミュータブルなクラス
greeting :: String-> ST s String
greeting name = do
sb <- JBuilder.new “Hello, ”
sb.append name
sb.toString
pureFunc :: String -> String
pureFunc name = (greeting name).run
純粋関数の中で使用可能