基本的な構文
7.6 関数定義
二項演算子について
前にちょっと勘違いしていた二項演算子ですが、ここに書いてありましたね。
ここを読んでとても理解が深まりました。
そこでちょっと疑問が…。
二項演算子を定義する、と聞いて連想するのがC++の演算子のオーバーライドですが(私だけ?)、
Haskellではもともとある演算子を再定義することが出来るのかな?
と思い、実験的に+演算子を独自に定義してみました。
- myPlus.hs
main = do print $ 10 + 30 (+) :: Int -> Int -> Int x + y = 100
ビルドしてみると…
% ghc -W -o myPlus myPlus.hs myPlus.hs:1:21: Ambiguous occurrence `+' It could refer to either `Main.+', defined at myPlus.hs:4:2 or `Prelude.+', imported from Prelude
なるほど、
私が定義した+演算子かPreludeモジュールで定義されている+演算子のどちらを呼び出せばよいか分からん!
と怒られました。この結果を見ると、オーバーライドは出来ないんですね。
こんな感じでいろいろ遊んでみました。
main = do print $ 10 @+--+@ 30 print $ (@+--+@) 50 50 print $ 30 `myPlus` 50 {- print $ 10 + 30 -} (@+--+@) :: Int -> Int -> Int x @+--+@ 0 = x (@+--+@) x y = x + y myPlus :: Int -> Int -> Int x `myPlus` y = x + y {- 関数のオーバーライドは出来ない! (+) :: Int -> Int -> Int x + y = 100 -}