Haskell Hackathon

let polymorphism

let polymorphismというのは,MLやHaskellで使われてる多相型を導入する方法で,多相型をletで束縛された値についてのみ推論する,という方針のこと. let f = fun g x -> g x という定義について,fの型は∀'a'b . ('a -> 'b) -> 'a -> 'bという多相型になる…

letの処理

ややこしいのは2点. 複数回束縛が現れる関数の処理 本質的に相互再帰的でない定義の分解 これらについて処理して,最終的には一つのlet式let {binding} in exprについて次の条件が満たされるようにしたい. bindingはpattern = exprという形 binding中には…

近況報告みたいな

普通に実装してます。http://svn.soutaro.com/has/trunkにあります。http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4-05w/text/eopl014.htmlあたりを見て適当に実装して、遅延評価ができるようになった。 f x y = x print f 100 (1/0) とかやって…

オフサイドルールの処理 - parse-error(t)って結局なんやったん?

parse-error(t)とか知るかよ、と思ってたんですが、どうもparse-error(t)が無いとまずいような気がしてきた*1。こういうやつが、困る。 let a = 1 in a+1 これは、 let { a = 1 } in a+1 になってほしいわけですが、私の書いたレキサだと、 let { a = 1 in a…

オフサイドルールの処理

予習編.たまーに,YAMLのパーサとか欲しくなるんだけど,インデントの処理をどうやったら良いのかよくわからなくなって困っていたんだけど,勉強になった.Haskell 98 Syntaxにこと細かに書いてあるので,適当に実装してみた.http://svn.soutaro.com/has/t…