Haskellについて戯言


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Haskellについて戯言

schameでちょっとlambdaを捕まえたので、

型付きラムダ計算もメモしながらちょこちょこと。

haskell素人ですので、自分で調べてください。

型付きlambda計算

数学の定義はよくわからんが、

たとえば型付きでないschemeのlambdaを見てみる。

(lambda (x y)
  (+ x y))

これはxとyを引数にとって、その演算を返す関数のことである。

この関数を実行するために必要なことは、

「xとyが足せる」

という事実があればいい。

ここで、xとyが足せるということを保証するのが型である。

他の言語パラダイムの中で、

僕が一番近いと思ってる仕組みはC++のテンプレート関数だが、

もしかすると間違っているのかもしれない。

テンプレート関数を用いて上記の足し算関数を実装するとこんな感じ。

template<typename t>
t adder(t x,t y){
  return x+y;
};

これで型tが+できる場合は関数として利用できる。

それを満たせば、doubleだろうが、intだろうがfloatだろうがなんでも利用可能になる。

  1. が使えるということは、その型が何のクラスのインスタンスなのか、

という事に関係する。(ここのクラスとインスタンスはオブジェクト指向の話とは似てるけど別腹。)

HaskellではNumクラスのインスタンスの型であれば、+の関数を利用できることが保障される。

Haskell基本型のInt,Integer,FloatなどはNumクラスのインスタンス。