この質問をグーグルで検索するのに苦労したので、ここに投稿しようと思いました。
私はその背後にあるロジックに興味があるだけなのか、それとも++
代わりに使用するのがクリエイターの好みなのかどうかに興味があります。つまり、2つの文字列(またはリスト)を連結する文字列に型クラスを使用することは、+
想像するのがそれほど難しいことではないようです。
編集:ので、私は、Haskellで1は、その背後にある容疑者の理由を持っていることを、追加する必要があります+
と++
型クラスで定義された関数であり、一方、Javaでの使用+
文字列連結は、言語の構文のみクリエイターの好みにその被写体のほんの一部であるために/意見。(これまでの回答は、私が自分の疑いについて正しかったことを示唆しています。)
また、haskellは数学的背景から来ており、数学的構文の影響を強く受けているため、好みや意見だけではなく、より深い理由があるかもしれません。
簡単に言えば、タイプのトラブルを引き起こすでしょう。
(+)
型Num
クラスの一部です:
class Num a where
(+), (-), (*) :: a -> a -> a
negate :: a -> a
abs :: a -> a
signum :: a -> a
fromInteger :: Integer -> a
x - y = x + negate y
negate x = 0 - x
そして(++) :: [a] -> [a] -> [a]
。
これは、最初の問題を確認するのは簡単です:私たちが望んでいた場合は(+)
、リスト上で動作するように、我々は実装しなければならない(*)
、negate
、abs
、signum
、とfromInteger
だけでなく、リストの。これは偽物です。
私たちが別のことを決めた場合は(+)
型クラスから、多分呼ばれる新しい型クラス、作るPlussable
ために(+)
、を追跡するためにあまりにも多くの型クラスがあるだろう、とのような単純な表現は1 + 2*(2-1)
、もはやタイプのものでもないだろうNum a => a
、それはタイプであろう(Plussable a, Timesable a, Minusable a) => a
、というように操作ごとに。複雑すぎます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加