豊福です。

  たけをさん、向井さん、ありがとうございます。

> 関数の多重定義は型クラスによってのみ実現されるのではないでしょうか。
> したがってこの時、一見同じ名前に見える >= ですが、実は
> Prelude.>= :: Ord a => a -> a -> Bool
> Main.>= :: Int -> Maybe Int -> Bool
> という2つの関数が存在していることになるのだと思います。

A Gentle Introduction to Haskell, Version 98
「やさしい Haskell 入門 (バージョン98)」
の「5  型クラスと多重定義」(ん、目次要約の方は「型クラスと
オーバローディング」になってる)
http://www.sampou.org/haskell/tutorial-j/classes.html
あたりの話ですね。

  確かに「他の言語との比較」のところに
「Haskell は、型の違う関数が共通の名前を共有するような C++ 流
の多重定義 はサポートしていない。」
とありました。

> Maybe Int は Ord なようなので、第一引数に Just を与えるようにするのが
> (あまり綺麗ではないですが)一番楽な解決策なように思います。

  お、これは知りませんでした。
    Just 2 < Just 3 -- => True
    Just 2 < Nothing -- => False
    Just 2 > Nothing -- => True
Nothing は -∞ のような働きですか。今回は Nothing を +∞ の
ように使いたかったのでこのままではダメですね。
ところで Maybe の (<),(>) などの定義はどこでしているんでしょう?

> もしくは、運用時にモナドを使うとか。

  モナドを使うとどういう風になりますか。

 ***

  そもそも今回の質問のきっかけは、「今までの最小値」と現在の
値を比較したい処理があり、「今までの最小値」の初期値を +∞的
なものにしよう、Maybe を使ってみよう、ということからでした。
こういうときは Haskell ではどう書くのがよいでしょうか。
---
                        豊福
                        nobu_toyofuku / nifty.com


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