- 発表枠しかないから発表するしかなかった
- C++書きたくない C++でHaskellを書くしかない
結論
template
型が一部違っていても型が全部違っていても使える。 チューリング完全なのでなんでも組める
operator
- 独自クラスを返す
- ペア同士に対してoperatorクラスを定義する
式がそのまま型にあらわれる
即時解説
ゴールはココ。
- マクロ展開
- 型オブジェクトの先頭と最後に&を入れる
- ラムダ式(のようなもの)を書く
map_(変数)のoperator()(関数適用)
正しい構文木をこの時点でアレするのは困難
ラムダ式用の記号とか冪乗の記号とかそのままでは使えないのでトークンとして再構成
型が読みづらい
SeqとSeqの間だけみてくれれば…
parse 正しい構文木を組み直す
現状
あとはEvalだけ
このままだとつらい
諦めた。 * 型づけを行おうとするとつらい * 再帰 template上で再帰しようとすると止まらない * desugar * 適当に扱いにくいところを処理する
map(リスト全値にfを適用)
やったこと
HaskellSyntaxに基づいて構文解析など
余談
- 作ってたらClangが落ちた
- auto周りが不安
- Clang最新版のビルドが通らない
- operatorを組んでたらなぜか動かない
- C++からHaskellが使えるようになった
- HaskellからC++を使おうか
まとめ
- C++でHaskellぽく
- Templateは強い
- Haskellは書ける
C++メタプログラミングの本読むと良いよ。