by shigemk2

当面は技術的なことしか書かない

Haskellを書きたい人生だった #kbkz_tech

kbkz.connpass.com

  • 発表枠しかないから発表するしかなかった
  • C++書きたくない C++でHaskellを書くしかない

結論

f:id:shigemk2:20150517162212p:plain

f:id:shigemk2:20150517162238p:plain

template

f:id:shigemk2:20150517162342p:plain

f:id:shigemk2:20150517162350p:plain

型が一部違っていても型が全部違っていても使える。 チューリング完全なのでなんでも組める

operator

f:id:shigemk2:20150517162436p:plain

  • 独自クラスを返す
  • ペア同士に対してoperatorクラスを定義する

f:id:shigemk2:20150517162555p:plain

式がそのまま型にあらわれる

即時解説

ゴールはココ。 f:id:shigemk2:20150517162625p:plain

  • マクロ展開
  • 型オブジェクトの先頭と最後に&を入れる
  • ラムダ式(のようなもの)を書く
  • map_(変数)のoperator()(関数適用)

  • 正しい構文木をこの時点でアレするのは困難

  • ラムダ式用の記号とか冪乗の記号とかそのままでは使えないのでトークンとして再構成

  • 型が読みづらい

  • SeqとSeqの間だけみてくれれば…

  • parse 正しい構文木を組み直す

現状

あとはEvalだけ

このままだとつらい

諦めた。 * 型づけを行おうとするとつらい * 再帰 template上で再帰しようとすると止まらない * desugar * 適当に扱いにくいところを処理する

f:id:shigemk2:20150517163250p:plain

map(リスト全値にfを適用)

f:id:shigemk2:20150517163342p:plain

やったこと

HaskellSyntaxに基づいて構文解析など

余談

  • 作ってたらClangが落ちた
  • auto周りが不安
  • Clang最新版のビルドが通らない
  • operatorを組んでたらなぜか動かない
  • C++からHaskellが使えるようになった
  • HaskellからC++を使おうか

まとめ

  • C++でHaskellぽく
  • Templateは強い
  • Haskellは書ける

C++メタプログラミングの本読むと良いよ。