Haskell で forall A. A -> A 系の型を作ってみる.まずもっとも単純に.
let x = x
t を型変数として x :: t で,undef 以外の何者でもない気がする.
んで,次.
let f x = x
これで f :: t->t . id 関数なような.
続いて
let y f = f (y f)
これで y :: (t->t)->t . fixpoint 関数とうか Y コンビネータなような.
ついでに,
let g y z = if True then y else z
とすると g :: t->t->t になる.意味のある関数ではないが... さて,これ以降はどうなるのだろうか?
ついでなので,forall a,b,... . a -> b -> ... も作ろうとすると
let f x y = f x y
とかで引数の数を増やせばいくらでもいける.意味はないけど.意味のあるものってどれくらいあるんだろう? undef, id, fixpoint 以外に意味のあるのがあるか?
- Newer: AWK - はじめ