カンスウノカタ

OCaml/F#を書いててHaskellを羨ましく思う点のひとつに、関数の型指定の書式があります。
こんなやつ↓

Foo :: Int -> Int -> String
Foo x y = (ry

綺麗でいいなぁ、といつも感じていました。
仕様拡張でF#にもそんな書き方登場しないかな・・・なんて叶わぬ願いを想っています。


型推論があるのでプリミティブな型についてはあまり気にする場面はありませんが、オブジェクトのメンバにアクセスしたい時はどうしても型を指定してやる必要があります。そんなものがいくつもあると、関数定義の初っ端から美しくない。


しかしそんなこと言っても結局は郷に従うしかありません。
そんな郷の中でこんな書き方を考えてみました・・・

// わざと冗長な書き方を・・・
let FSharp (str : System.String) (v : System.Lazy<int32>) : System.String =
    str.Substring v.Value

// ちょっとHaskell風?
let Haskell : string -> Lazy<int> -> string =
 fun str v ->
    str.Substring v.Value

ラムダが露出してしまうのがアレですが、あまりにも定義がグチャグチャになるようなら後者の方が(個人的に)見やすいかもしれません。