Javaの感覚、Haskellの感覚
Javaやっていて、Haskellを学んでいると、なにか原落ちしない感覚、違和感のある感覚があり、それがうまく言葉に表せないことが多々あります。
こういうところが、腹落ちしてなかったのだなぁと感じたことのメモ。
データ構造としてMapはどの言語でも使います。
Javaだとこんな感じ:
Map<String, String> m = new HashMap<String, String>(); m.put("key1", "val1"); String val = m.get("key1");
newでインスタンスを作って、メソッドを呼び出してプログラミングをしていきます。 newしないのは、シングルトンを作るときぐらいでしょうか。最近は、何でもインジェクションですませる方向にあるので、newをほとんどしないかも知れませんが。 ともかく、newして、なんかする、っていう感覚です。
HaskellにもMapがありますが、
let m = Map "key1" "value"
といったコーディングが出来ません。 コンストラクタが隠されている訳です。
実際にはデータを作る関数があるのでそれを使えば良い訳ですが:
Prelude Data.Map> let m1 = insert "key1" "val1" empty Prelude Data.Map> m1 fromList [("key1","val1")] Prelude Data.Map> let m2 = fromList [("key1", "val2"), ("key2", "val2")] Prelude Data.Map> m2 fromList [("key1","val2"),("key2","val2")] Prelude Data.Map>
コンストラクタが隠されている型が、思った以上に多いような感じがします(当社比)。 慣れの問題かと思いますが、データを作る関数を探すことがちょっとしたハードルなのかなぁと。