newsynth-0.3.0.1: Exact and approximate synthesis of quantum circuits

Safe HaskellSafe-Inferred

Quantum.Synthesis.ToReal

Contents

Description

This module provides a type class of things that can be converted to arbitrary precision real numbers.

Synopsis

Conversion to real number types

class ToReal a whereSource

A type class for things that can be converted to a real number at arbitrary precision.

Methods

to_real :: (Floating r, ArcTan2 r) => a -> rSource

Instances

ToReal Double 
ToReal Float 
ToReal Int 
ToReal Integer 
ToReal Rational 
Precision e => ToReal (FixedPrec e) 

Dynamic conversion to FixedPrec

dynamic_fixedprec :: forall a r. ToReal r => Integer -> (forall e. Precision e => FixedPrec e -> a) -> r -> aSource

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 -> aSource

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).