Koka
https://gyazo.com/ea1c894670e04b61fd6927e80f7e456d
以下のような特徴を持つMicroSoft製のプログラミング言語
effect typing
Effect Handler
PerceusによりGCがなく、Cにcompileされる
関数型言語
型推論ありの強い型付け
functional but in-place (FBIP)という独自のパラダイム
言語のコア部分が小さい
糖衣構文がめちゃくちゃ多い
JavaScriptに似たSyntax (そんなに似てない)
開発者はDaan Leijen
拡張子は.kk
読み方は「こうか」
Effectの日本語である「効果」由来
ちゃんとした訳としては「作用」とかの方が近そうだがmrsekut.icon
KokaでAlgebraic Effectsに触れる
blog
github
Haskell実装
docs
VSCode拡張
使う
Nixで入れられる
$ nix-shell -p koka
適当にhoge.kkを作って、:l hoge.kkで読み込めば良い ref
Dot selection
KokaのEffect Types
KokaのEffect Handler
Kokaのwith文
参考
Algebraic Effects に触れてみたくて Koka に入門した - Qiita
Misreading Chat 63
#プログラミング言語
#WIP
kokaって別に純粋関数だけを扱ってるわけでもないんだよな
純粋なの、exnとdivだけだし
それでもHaskellよりも便利に扱えそうな感じする(?)
algebraic effectsが普通に実用できるようになったら、haskellの制限とかの良さって何になるんだっけ、というのを考えたい
https://koka-lang.github.io/koka/doc/book.html#sec-combine
effect handlerは、最終的に合成を行うFreeモナドのinstanceとして表現できる
代数的でないmonad (e.g. Cont)は表現できない
Kokaは内部的には、monadとshift/resetを使用してeffect handlerをコンパイルしてる
handlerを書かなったときにちゃんとコンパイルエラーになるか #??
hsで言うmain関数的なものがあればすぐわかるはず
main関数にeffectが存在すればそれがhandlingされないものになる
あるいはランタイムがhandlingするもの、になる
例えばconsoleとかは当然残っていて良いはず
そうじゃないとhandling忘れめちゃくちゃ多発するでしょ