Koka
https://gyazo.com/ea1c894670e04b61fd6927e80f7e456d
effect typing
Effect Handler
関数型言語
型推論ありの強い型付け
言語のコア部分が小さい
糖衣構文がめちゃくちゃ多い
JavaScriptに似たSyntax (そんなに似てない)
拡張子は.kk
読み方は「こうか」
Effectの日本語である「効果」由来
ちゃんとした訳としては「作用」とかの方が近そうだがmrsekut.icon
使う
Nixで入れられる
$ nix-shell -p koka
適当にhoge.kkを作って、:l hoge.kkで読み込めば良い ref 参考
kokaって別に純粋関数だけを扱ってるわけでもないんだよな
純粋なの、exnとdivだけだし
それでもHaskellよりも便利に扱えそうな感じする(?)
algebraic effectsが普通に実用できるようになったら、haskellの制限とかの良さって何になるんだっけ、というのを考えたい
effect handlerは、最終的に合成を行うFreeモナドのinstanceとして表現できる 代数的でないmonad (e.g. Cont)は表現できない
Kokaは内部的には、monadとshift/resetを使用してeffect handlerをコンパイルしてる handlerを書かなったときにちゃんとコンパイルエラーになるか #?? hsで言うmain関数的なものがあればすぐわかるはず
main関数にeffectが存在すればそれがhandlingされないものになる
あるいはランタイムがhandlingするもの、になる
例えばconsoleとかは当然残っていて良いはず
そうじゃないとhandling忘れめちゃくちゃ多発するでしょ