質問: Boolean型ってTrueが1?0?-1? あなたのお使いの言語は?
回答: もちろん、コンピューターは数値でなければ処理出来ないのですから、Boolean 型の True/False は、どんな言語においても、必ず何らかの内部値が割り当てられています。 しかし、「True が -1 で False が 0」とかいう話は、「ある特定の処理系における決まり」に過ぎず、「とある一例」に過ぎません。 たとえば同じ言語のコンパイラが、異なる処理系に用意されている場合、それぞれの内部値が同じであるとは断言出来ません(その1つの理由は、「真偽値は、それぞれの CPU の設計によって、最適値が異なってくるから」です)。 また、そもそも「Boolean 型で扱いたい」という要求は、「True か False かで扱いたい」という要求です。「-1 か 0(つまり算術演算が出来る値)で扱いたい」ならば、数値型か列挙型を使うべきです。論理演算しか出来ない型だからこそ、目的に適った、安全なプログラムが書けるという場合が有るわけです(そうでなければ Boolean 型というものが存在するはずがない)。 仮に、True の内部値が 555 で、False の内部値が -35 というトンデモな値であっても(それぞれの内部値が違いさえすれば)、ソースプログラム上で True と False を算術演算しない限り、それは正しく動作するでしょう。 どうしても Boolean 型の「内容」(内部値とは必ずしも同じでないことに注意)で算術演算したいならば、そのようなロジックの設計を見直すか、あるいは、Boolean 型と数値型を変換するメソッドを用意するべきです。ご質問にある Ord 関数とは、まさにそのためのメソッドです。 True は、あくまで True 以外の何者でもなく、False は、あくまで False 以外の何者でもなく、Boolean 型は足したり引いたり出来る値ではないのです。