Как вы используете класс типов Bounded в Haskell для определения типа с диапазоном с плавающей запятой?

Я ожидал, что следующий код выйдет из строя с ошибкой типа из-за нарушения minBound и maxBound. Но, как видите, он проходит без отметки об ошибке.

{-# OPTIONS_GHC -XTypeSynonymInstances #-}
module Main where

type Probability = Float
instance Bounded Probability where
    minBound = 0.0
    maxBound = 1.0

testout :: Float -> Probability
testout xx = xx + 1.0

main = do
  putStrLn $ show $ testout 0.5
  putStrLn $ show $ testout (-1.5)
  putStrLn $ show $ testout 1.5

В Prelude я получаю это

*Main> :type (testout 0.5)
(testout 0.5) :: Probability

И в ответ на приглашение я получаю следующее:

[~/test]$runhaskell demo.hs
1.5
-0.5
2.5

Ясно, что я не объявляю Bounded должным образом, и я уверен, что делаю что-то синтаксически неправильно. В Google не так много простых вещей, касающихся ограниченных классов типов, поэтому любая помощь будет принята с благодарностью.

16
задан ramanujan 29 December 2010 в 20:02
поделиться