nobsun です

> ところで、初歩の初歩の疑問なんですが。
> powerを計算するオペレータに、 ** と ^ と ^^ がありますよね。
> 引数に取れる型が違いますが。
> でも、そもそも、なんでほぼ同じ計算をするオペレータを3つも
> 作ったんでしょう?
> 
> 効率のため、というのはHaskellにふさわしくないような気がしますし :-P
> 何か、型をポリモルフィックに出来ない根本的な理由があるのでしょうか?
> あるいは意味的に3つを分けるべき理由が存在するのでしょうか?

型理論的に理解しているわけではないので、上手く説明できませんが、
各オペレータの型は

(^)  :: (Num a, Integral b) => a -> b -> a
(^^) :: (Fractional a, Integral b) => a -> b -> a
(**) :: (Fractional a) => a -> a -> a

で、文脈 context が違います。ポリモルフィックにする場合文脈が同じでないと
定義しようがありません。

もし、演算子 ** だけでやろうとすると、
型宣言は

(**) :: (Num a, Integral b) 
     or (Fractional a, Integral b) 
     or (Fractional a, Fractional b) => a -> b -> a

のような感じの文脈の書きかたになるでしょうけど、構文規則では
そのような書きかたはできません。また、できたとしても、
文脈毎に定義を書きわけなければなりません。そこまでして、ポリモルフィック
にやる必要があるのかということだと思います。

似てるけど別物ということほうが自然な感じがします。

--nobsun

Nobuo Yamashita                 mailto:nobsun / sampou.org
  I love programming.           http://www.sampou.org/
  I love pencil puzzles.        http://www.puzzle.jp/








          
          

--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/