Safe Haskell | Safe |
---|---|
Language | Haskell98 |
This module provides a type class of things that can be converted to arbitrary precision real numbers.
- class ToReal a where
- dynamic_fixedprec :: forall a r. ToReal r => Integer -> (forall e. Precision e => FixedPrec e -> a) -> r -> a
- dynamic_fixedprec2 :: forall a r s. (ToReal r, ToReal s) => Integer -> (forall e. Precision e => FixedPrec e -> FixedPrec e -> a) -> r -> s -> a
Conversion to real number types
A type class for things that can be converted to a real number at arbitrary precision.
Dynamic conversion to FixedPrec
dynamic_fixedprec :: forall a r. ToReal r => Integer -> (forall e. Precision e => FixedPrec e -> a) -> r -> a Source #
It would be useful to have a function for converting a symbolic real number to a fixed-precision real number with a chosen precision, such that the precision e depends on a parameter d:
to_fixedprec :: (ToReal r) => Integer -> r -> FixedPrec e to_fixedprec d x = ...
However, since e is a type, d is a term, and Haskell is not dependently typed, this cannot be done directly.
The function dynamic_fixedprec
is the closest thing we have to a
workaround. The call dynamic_fixedprec
d f x calls
f(x'), where x' is the value x converted to d digits of
precision. In other words, we have
dynamic_fixedprec d f x = f (to_fixedprec d x),
with the restriction that the precision e cannot occur freely in the result type of f.
dynamic_fixedprec2 :: forall a r s. (ToReal r, ToReal s) => Integer -> (forall e. Precision e => FixedPrec e -> FixedPrec e -> a) -> r -> s -> a Source #
Like dynamic_fixedprec
, but take two real number arguments. In
terms of the fictitious function to_fixedprec
, we have:
dynamic_fixedprec2 d f x y = f (to_fixedprec d x) (to_fixedprec d y).