Ich erwartete, dass der folgende Code mit einem Typfehler aufgrund der Verletzung von minBound und maxBound fehlschlägt. Aber wie Sie sehen können, geht es ohne Fehlermeldung.Wie verwenden Sie die Bounded-Typklasse in Haskell, um einen Typ mit einem Fließkommabereich zu definieren?
{-# 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
Im Prelude bekomme ich diese
*Main> :type (testout 0.5)
(testout 0.5) :: Probability
Und an der Eingabeaufforderung ich diese:
[~/test]$runhaskell demo.hs
1.5
-0.5
2.5
Offenbar nicht Bounded Ich erkläre richtig, und ich bin sicher, dass ich mache syntaktisch etwas falsch. Es gibt in Bezug auf Bounded typeclasses nicht viele einfache Dinge in Google, daher würde jede Hilfe sehr geschätzt werden.
Sehr hilfreich, vielen Dank. Eine Frage: Sie legen ein Ellipsen ("...") für die verschiedenen Arten, in denen mkP und mkBC mit vorhandenen Operatoren auf Dinge vom Num-Typ interagieren. Ich nehme an, der Zweck davon ist, arithmetische Operatoren für Dinge des Probability-Typs zu definieren, die die Ausgabe durch mkP laufen lassen, um Grenzen zu prüfen. – ramanujan
@ramanujan, ja. Im Grunde nur in diesem Muster weitermachen. – luqui
Falls Sie nicht wissen, wo Sie nach den 'Num'-Methoden suchen sollten: http://hackage.haskell.org/packages/archive/base/4.2.0.2/doc/html/Prelude.html#t%3ANum – luqui