sifflet-2.3.0: Simple, visual, functional language for learning about recursion.

Data.Number.Sifflet

Description

This module provides the Sifflet Number type and many operations upon it. Most of the operations are provided by making Number an instance of the classes Num, Real, Enum, Integral, Fractional, Floating, and RealFrac. These are, I think, all of the normal Haskell numeric type classes *except* RealFloat. There are also a few functions defined in addition to the class methods.

The *primary* purpose of this module is to be the library module used by Sifflet programs exported to Haskell. The *secondary* purpose (maybe no less important, but realized after the first) is to implement the Sifflet number Values (previously done with the VInt and VFloat constructors).

Synopsis

# Documentation

data Number Source

A Number represents a real number, which can be exact (Integer) or inexact (Double).

Constructors

 Exact Integer Inexact Double

Instances

 Source In Haskell both Intgeger and Double are instances of Enum, so Number should be an instance too. Also, this is a prerequisite of being an instance of Integral. Source Source Numbers are Floating, i.e., support exponential, log, and trig functions. This works directly for inexact Numbers, and otherwise by conversion from Exact to Inexact. Source Numbers are Fractional, i.e., support division and conversion from Rational. This works directly for inexact Numbers, and otherwise by conversion from Exact to Inexact. Source Numbers are Integral, i.e., can do integer division and convert to Integer. However, there is a restriction: this only works for Exact numbers; for Inexact, there will be an error. Some may see this as regrettable, but how is it different in principle from division, which doesn't work for zero divisors, and square root, which doesn't work for negative numbers? Source Number as an instance of Num Source Number as an ordered type Source Source Numbers are Real, i.e., can be converted to Rational Source Source This Show instance will not be compatible with the derived Read instance above -- so fix it. (And yet, mysteriously, ghci accepts 1 and 1.0 as Number literals.) Source

Tell whether a Number is exact

Take a number, which may be exact or inexact, and produce the inexact number which equals it. Note that there is no inverse function toExact, because some inexact numbers like 3.5 are not equal to any exact number. The class RealFrac provides methods round, ceiling, floor, truncate for converting to exact numbers.