MixML 作ってみる
ひげ
whoami
今日まで学生!
おごってください
明後日から東京勤務
好きな(ML系)言語 : Haskell OCaml
モジュール・レコード・バリアント いいよね
最近 : Haskell Antenna をリニューアルした
Backpack in Haskell
知ってる人?
※ ここで Haskell という単語は GHC の別名として使っています
Backpack
Haskell に強いモジュール性を追加するための新し
いモジュールシステム
GHC 8.2より利用可能 (stack はまだ未対応)
MixML という言語をベースにしている (らしい)
-- Str.hsig って感じの記法が追加
signature Str where
data Str
instance Eq Str
null :: Str -> Bool
singleton :: Char -> Str
splits :: Str -> [(Str, Str)]
parts :: Str -> [[Str]]
MixML
(ここからが本題)
ML系モジュールシステム + Mixin モジュールシス
テムの研究言語
Mixin’ Up the ML Module System (ICFP2008)
SML/NJでの実装があった
MixMLのサンプル
ココから引用
unit Fib =
link F = {val fib' : int -> int -> int -> int} with
{
val fib' (n2 : int) (n1 : int) (n : int) =
if n == 0 then n2
else if n == 1 then n1
else F.fib' n1 (n1 + n2) (n - 1)
val fib = fib' 0 1
}
module F = !Fib
do print "fib 10 = "; print (F.fib 10); print "n"
Mixinモジュールシステム
(ML系モジュールシステムは教養なので割愛)
Object-oriented programming with Flavors 由来
のモノ
“mixin is an abstract subclass”
Mixin モジュールの利点は再帰リンク
モジュールの合成が一種の再帰リンク
ML での(相互)再帰モジュールの分割コンパイル
における問題を解決してくれる
MixML よくわからない
ので実装してみることにした
(Haskell で)
取りあえずできた
まだぜんぜん途中
matsubara0507/mixml-hs
感想
parsec しんどい
とうか構文解析しんどい
SML -> Haskell のしんどさ
気軽に例外を投げやがって
気軽に破壊的代入を使いやがって
気軽に内部状態を持ちやがって
セルフ型推論しんどい(笑)
おまけ
Docker image を作った
matsubara0507/docker-mixml
おしまい

MixML 作ってみる