module Numeric.MixedTypes.Reduce
(
CanGiveUpIfVeryInaccurate(giveUpIfVeryInaccurate)
, numErrorVeryInaccurate
)
where
import Numeric.MixedTypes.PreludeHiding
import Numeric.CollectErrors ( CN, NumError (NumError) )
class CanGiveUpIfVeryInaccurate t where
giveUpIfVeryInaccurate :: CN t -> CN t
giveUpIfVeryInaccurate = CN t -> CN t
forall a. a -> a
id
numErrorVeryInaccurate :: String -> String -> NumError
numErrorVeryInaccurate :: String -> String -> NumError
numErrorVeryInaccurate String
context String
detail =
case (String
context, String
detail) of
(String
"", String
"") -> String -> NumError
NumError (String -> NumError) -> String -> NumError
forall a b. (a -> b) -> a -> b
$ String
msg String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"."
(String
"", String
_) -> String -> NumError
NumError (String -> NumError) -> String -> NumError
forall a b. (a -> b) -> a -> b
$ String
msg String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
": " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
detail
(String
_, String
"") -> String -> NumError
NumError (String -> NumError) -> String -> NumError
forall a b. (a -> b) -> a -> b
$ String
context String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
": " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
msg String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"."
(String, String)
_ -> String -> NumError
NumError (String -> NumError) -> String -> NumError
forall a b. (a -> b) -> a -> b
$ String
context String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
": " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
msg String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
": " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
detail
where
msg :: String
msg = String
"Very inaccurate, too little information"
instance CanGiveUpIfVeryInaccurate Int
instance CanGiveUpIfVeryInaccurate Integer
instance CanGiveUpIfVeryInaccurate Rational