12. var v = "";
function a(){
v += "a";
}
function b(){
v += "b";
}
a(); // v = "a"
a(); // v = "aa"
b(); // v = "aab"
b(); // v = "aabb"
13. var v = "";
function a(v){
return v += "a";
}
function b(v){
return v += "b";
}
v = a(v); // v = "a"
v = a(v); // v = "aa"
v = b(v); // v = "aab"
v = b(v); // v = "aabb"
23. To create a simple web GUI:
$ cat >hello.hs <<EOF
import Re?ex.Dom
main = mainWidget $ text "Hello, world!"
EOF
$ ghcjs hello.hs
Then navigate your browser to
?le:///path/to/try-re?ex/hello.jsexe/index.html
29. el
? HTML Elementを表すWidget
? arg1 …タグとなる文字列
? arg2 …タグの子要素になるWidget
? return … Widget
el :: MonadWidget t m => String -> m a -> m a
30. DOMの構築1
import Reflex.Dom
main = mainWidget $ el “div" $ text
"Hello, world!"
<html>
<head>
…
</head>
<body>
<div>Hello, world!</div>
</body>
</html>
31. DOMの構築2
import Reflex.Dom
main = mainWidget $ el "div" $ do
el "h1" $ text "タイトル"
el "p" $ text "文章"
<html>
<head>…</head>
<body>
<div>
<h1>タイトル</h1>
<p>文章</p>
</div>
</body>
</html>
36. dynText
dynText :: MonadWidget t m => Dynamic t
String -> m ()
? text関数のDynamic Stringを受け取る版
? 引数 … Dynamic t String
? return … textノードWidget
37. textInput
dynText :: MonadWidget t m
=> Dynamic t String -> m ()
? テキスト入力フィールドWidgetを返す関数
? 引数 … なし
? return … テキスト入力Widget
? input
? 初期値や属性を指定できる
38. textInputの機能
data TextInput t
= TextInput {
_textInput_value :: Dynamic t String
, _textInput_keypress :: Event t Int
, _textInput_keydown :: Event t Int
, _textInput_keyup :: Event t Int
, _textInput_hasFocus :: Dynamic t Bool
, _textInput_element :: HTMLInputElement
}
39. Dynamicの変換
1.import Reflex
2.import Reflex.Dom
3.import Safe (readMay)
5.main = mainWidget $ do
6. result <- numberInput
7. resultString <- mapDyn show result
8. dynText resultString
9.
10.numberInput :: MonadWidget t m => m
(Dynamic t (Maybe Double))
11.numberInput = do
12. n <- textInput
13. mapDyn readMay $ _textInput_value n
40. elの機能
data El t
= El { _el_element :: HTMLElement
, _el_clicked :: Event t ()
, _el_keypress :: Event t Int
, _el_scrolled :: Event t Int
}