30. 例2:文字列引数をとる
! [ERROR AT TYPECHECKER] at line 1, characters 7-13:
this expression has type
string -> string
but is expected of type
string.
let md s t = {Ma@s;r@t;down}
Hello, md{c}!
^^^^^^
型が合わないと……
Ma@s;r@t;down
31. 例3:整数値引数をとる
let repeat n s =
if n <= 0 then {} else
s ^ (repeat (n - 1) s)
let repeat = repeat
letは再帰
44. div .test #sentence {
The quick brown fox jumps over the lazy dog.
}
3 クラス名・ID名オプション
<div class="test" id="sentence">
The quick brown fox jumps over the lazy dog.
</div>
余剰(省略可能)な引数
HTML を強く意識した機能
現在仕様改定を計画中のため,詳細は割愛
(’a maybe 型 の値として扱いたい)
46. 5 出力時インデント
let p content =
{<p>deeper{@content;}</p>}<p>deeper{@content;}</p>
出力のインデントを深くし,
前後に改行を補う
47. 5 出力時インデント
let p content =
{<p>deeper{@content;}</p>}
<p>
Time flies like an arrow.
</p>
p{Time flies like an arrow.}
<p>deeper{@content;}</p>
deeper が改行とインデントを挿入
48. p{␣Time flies like an arrow.␣}
5 出力時インデント
let p content =
{<p>deeper{@content;}</p>}
<p>
Time flies like an arrow.
</p>
<p>deeper{@content;}</p>
{ 直後と } 直前は
空白と改行を無視
49. 5 出力時インデント
let p content =
{<p>deeper{@content;}</p>}
<p>
Time flies like an arrow.
</p>
p{↲
␣␣Time flies like an arrow.↲
}
<p>deeper{@content;}</p>
50. 5 出力時インデント
<p>
Time flies like an arrow.
Fruit flies like a banana.
</p>
p{↲
␣␣Time flies like an arrow.↲
␣␣Fruit flies like a banana.↲
}
途中の改行は
無視されない
58. let-mutable title <- {}
let maketitle =
let ttl = !title in
{<div class="title">@ttl;</div>}
let title ttl =
title <- ttl before {<title>@ttl;</title>}
document{
title{MLstudy}
}{
maketitle;
…
}
<div class="title">@ttl;</div>
<title>@ttl;</title>
6 擬似遅延
59. let-mutable title <- {}
let maketitle =
let ttl = !title in
{<div class="title">@ttl;</div>}
let title ttl =
title <- ttl before {<title>@ttl;</title>}
document{
title{MLstudy}
}{
maketitle;
…
}
<div class="title">@ttl;</div>
<title>@ttl;</title>
即座に
評価されて
破滅!
6 擬似遅延
60. let-mutable title <- {}
let maketitle () =
let ttl = !title in
{<div class="title">@ttl;</div>}
let title ttl =
title <- ttl before {<title>@ttl;</title>}
document{
title{MLstudy}
}{
maketitle(());
…
}
<div class="title">@ttl;</div>
<title>@ttl;</title>
普通の
回避方法:
() でサンク
()
6 擬似遅延
61. let-mutable title <- {}
let maketitle () =
let ttl = !title in
{<div class="title">@ttl;</div>}
let title ttl =
title <- ttl before {<title>@ttl;</title>}
document{
title{MLstudy}
}{
maketitle(());
…
}
<div class="title">@ttl;</div>
<title>@ttl;</title>
😫
実装方法に依存した,
マークアップ上意味のない
() が現れる……
()
6 擬似遅延
62. 6 擬似遅延 let-lazy
let-mutable title <- {}
let-lazy maketitle =
let ttl = !title in
{<div class="title">@ttl;</div>}
let title ttl =
title <- ttl before {<title>@ttl;</title>}
document{
title{MLstudy}
}{
maketitle;
…
}
<div class="title">@ttl;</div>
<title>@ttl;</title>
😄
エレガントな表記で
意図通り動く。
let-lazy
を使うと