Oczekiwano, że poniższy kod zakończy się niepowodzeniem z błędem typu z powodu naruszenia wartości minBound i maxBound. Ale, jak widać, przechodzi on bez zgłaszania błędu.W jaki sposób użyć typu Bounded w Haskell, aby zdefiniować typ z zakresem zmiennoprzecinkowym?
{-# 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
W Prelude uzyskać to
*Main> :type (testout 0.5)
(testout 0.5) :: Probability
iw wierszu uzyskać to:
[~/test]$runhaskell demo.hs
1.5
-0.5
2.5
Oczywiście nie jestem oświadczając ograniczone właściwie, i jestem pewien, że Robię coś nieprawidłowo składniowo. W Google nie ma zbyt wielu prostych tematów związanych z czcionkami Bounded, więc każda pomoc będzie bardzo doceniana.
Bardzo pomocny, bardzo dziękuję. Jedno pytanie: wstawiasz elipsę ("..."), aby zdefiniować różne sposoby interakcji mkP i mkBC z istniejącymi operatorami na rzeczach Num. Przypuszczam, że celem tego jest zdefiniowanie operatorów arytmetycznych dla rzeczy typu Prawdopodobieństwo, które utrzymują wyjście przez mkP do sprawdzania ograniczeń. – ramanujan
@ramanujan, tak. Zasadniczo kontynuuj w tym kierunku. – luqui
Jeśli nie wiesz, gdzie szukać metod "Num": http://hackage.haskell.org/packages/archive/base/4.2.0.2/doc/html/Prelude.html#t%3ANum – luqui