Mi aspettavo che il seguente codice fallisse con un errore di tipo a causa della violazione di minBound e maxBound. Ma, come puoi vedere, passa attraverso senza segnalare un errore.Come si usa la classe di tipi Bounded in Haskell per definire un tipo con un intervallo in virgola mobile?
{-# 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
nel preludio ottengo questo
*Main> :type (testout 0.5)
(testout 0.5) :: Probability
E al prompt ottengo questo:
[~/test]$runhaskell demo.hs
1.5
-0.5
2.5
Chiaramente non sto dichiarando Bounded correttamente, e sono sicuro che sto facendo qualcosa di sbagliato sintatticamente Non ci sono molte cose semplici su Google per quanto riguarda i tipografi limitati, quindi qualsiasi aiuto sarebbe molto apprezzato.
Molto utile, grazie mille. Una domanda: metti un'ellissi ("...") per definire i vari modi in cui mkP e mkBC interagiscono con gli operatori esistenti su cose di tipo Num. Suppongo che lo scopo di ciò sia di definire gli operatori aritmetici per cose di tipo Probability che continuano a far girare l'output attraverso mkP per fare il controllo dei limiti. – ramanujan
@ramanujan, sì. Fondamentalmente, continua in quel modello. – luqui
Nel caso in cui non si sappia dove cercare i metodi 'Num': http://hackage.haskell.org/packages/archive/base/4.2.0.2/doc/html/Prelude.html#t%3ANum – luqui