Array#mapの型がおかしくなる問題
最近だとkinabaさんがGenerics > Template なところで話題にされてたのが記憶に新しいところだと思うのですが、つまりそういう問題です。
配列は要素の型Tでパラメータ化された型であると考えることができて、ここでArray
ちなみにC++でmapとか書くと、ちゃんとコンパイル止まりますが、これはmapメソッドの型がtemplateになってて、つまりメソッドの型が多相型になれるから。残念ながらMLの型推論には、メソッドの型(返り値やパラメータの型、メソッドの型それ自体)が多相型になれないルールがあるので、こういう推論はできません。
ちなみに対処法は、とりあえず有限回だけmapできるようにすることにして、Array
あとは、mapの型だけ手で書くという対処法はあります。が、これは非常にundocumentedな手法で型推論との整合性をなんとかしてるみたいで、良くわからないという。名大で何年か修行を積めば理解できるようになるかもしれません。