Cabal revisions of numeric-prelude-0.4
Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.
revision 1
-Name: numeric-prelude-Version: 0.4-License: GPL-License-File: LICENSE-Author: Dylan Thurston <dpt@math.harvard.edu>, Henning Thielemann <numericprelude@henning-thielemann.de>, Mikael Johansson-Maintainer: Henning Thielemann <numericprelude@henning-thielemann.de>-Homepage: http://www.haskell.org/haskellwiki/Numeric_Prelude-Category: Math-Stability: Experimental-Tested-With: GHC==6.4.1, GHC==6.8.2, GHC==6.10.4, GHC==6.12.3-Tested-With: GHC==7.2.2, GHC==7.4.1, GHC==7.6.3-Cabal-Version: >=1.6-Build-Type: Simple-Synopsis: An experimental alternative hierarchy of numeric type classes-Description:- Revisiting the Numeric Classes- .- The Prelude for Haskell 98 offers a well-considered set of numeric classes- which covers the standard numeric types- ('Integer', 'Int', 'Rational', 'Float', 'Double', 'Complex') quite well.- But they offer limited extensibility and have a few other flaws.- In this proposal we will revisit these classes, addressing the following concerns:- .- [1] The current Prelude defines no semantics for the fundamental operations.- For instance, presumably addition should be associative- (or come as close as feasible),- but this is not mentioned anywhere.- .- [2] There are some superfluous superclasses.- For instance, 'Eq' and 'Show' are superclasses of 'Num'.- Consider the data type- @ data IntegerFunction a = IF (a -> Integer) @- One can reasonably define all the methods of 'Algebra.Ring.C' for- @IntegerFunction a@ (satisfying good semantics),- but it is impossible to define non-bottom instances of 'Eq' and 'Show'.- In general, superclass relationship should indicate- some semantic connection between the two classes.- .- [3] In a few cases, there is a mix of semantic operations and- representation-specific operations.- 'toInteger', 'toRational',- and the various operations in 'RealFloating' ('decodeFloat', ...)- are the main examples.- .- [4] In some cases, the hierarchy is not finely-grained enough:- Operations that are often defined independently are lumped together.- For instance, in a financial application one might want a type \"Dollar\",- or in a graphics application one might want a type \"Vector\".- It is reasonable to add two Vectors or Dollars,- but not, in general, reasonable to multiply them.- But the programmer is currently forced to define a method for '(*)'- when she defines a method for '(+)'.- .- In specifying the semantics of type classes,- I will state laws as follows:- .- > (a + b) + c === a + (b + c)- .- The intended meaning is extensional equality:- The rest of the program should behave in the same way- if one side is replaced with the other.- Unfortunately, the laws are frequently violated by standard instances;- the law above, for instance, fails for 'Float':- .- > (1e20 + (-1e20)) + 1.0 = 1.0- > 1e20 + ((-1e20) + 1.0) = 0.0- .- For inexact number types like floating point types,- thus these laws should be interpreted as guidelines rather than absolute rules.- In particular, the compiler is not allowed to use them for optimization.- Unless stated otherwise, default definitions should also be taken as laws.- .- Thanks to Brian Boutel, Joe English, William Lee Irwin II, Marcin- Kowalczyk, Ketil Malde, Tom Schrijvers, Ken Shan, and Henning- Thielemann for helpful comments.- .- .- Usage:- .- Write modules in the following style:- .- > [-# NoImplicitPrelude #-]- > module MyModule where- >- > ... various specific imports ...- >- > import NumericPrelude- .- Importing @NumericPrelude@ is almost the same as- .- > import NumericPrelude.Numeric- > import NumericPrelude.Base .- .- Instead of the @NoImplicitPrelude@ pragma- you could also write @import Prelude ()@- but this will yield problems with numeric literals.- .- There are two wrapper types that allow types- to be used with both Haskell98 and NumericPrelude type classes- that are initially implemented for only one of them.- .- .- Scope & Limitations\/TODO:- .- * It might be desireable to split Ord up into Poset and Ord- (a total ordering).- This is not addressed here.- .- * In some cases, this hierarchy may not yet be fine-grained enough.- For instance, time spans (\"5 minutes\") can be added to times (\"12:34\"),- but two times are not addable. (\"12:34 + 8:23\")- As it stands,- users have to use a different operator for adding time spans to times- than for adding two time spans.- Similar issues arise for vector space et al.- This is a consciously-made tradeoff, but might be changed.- This becomes most serious when dealing with quantities with units- like @length\/distance^2@, for which @(*)@ as defined here is useless.- (One way to see the issue: should- @ f x y = iterate (x *) y @- have principal type- @ (Ring.C a) => a -> a -> [a] @- or something like- @ (Ring.C a, Module a b) => a -> b -> [b] @- ?)- .- * I stuck with the Haskell 98 names.- In some cases I find them lacking.- Neglecting backwards compatibility, we have renamed classes as follows:- Num --> Additive, Ring, Absolute- Integral --> ToInteger, IntegralDomain, RealIntegral- Fractional --> Field- Floating --> Algebraic, Transcendental- Real --> ToRational- RealFrac --> RealRing, RealField- RealFloat --> RealTranscendental- .- .- Additional standard libraries might include Enum, IEEEFloat (including- the bulk of the functions in Haskell 98's RealFloat class),- VectorSpace, Ratio, and Lattice.--Extra-Source-Files:- Makefile- docs/NOTES- docs/README- src/Algebra/GenerateRules.hs--Flag splitBase- description: Choose the new smaller, split-up base package.--Flag buildTests- description: Build test executables- default: False--Source-Repository this- Tag: 0.4- Type: darcs- Location: http://code.haskell.org/numeric-prelude/--Source-Repository head- Type: darcs- Location: http://code.haskell.org/numeric-prelude/--Library- Build-Depends:- parsec >=1 && <4,- QuickCheck >=1 && <3,- storable-record >=0.0.1 && <0.1,- non-negative >=0.0.5 && <0.2,- utility-ht >=0.0.6 && <0.1,- deepseq >=1.1 && <1.4- If flag(splitBase)- Build-Depends:- base >= 2 && <5,- array >=0.1 && <0.5,- containers >=0.1 && <0.6,- random >=1.0 && <1.1- Else- Build-Depends: base >= 1.0 && < 2-- If impl(ghc>=7.0)- CPP-Options: -DNoImplicitPrelude=RebindableSyntax- Extensions: CPP-- GHC-Options: -Wall- Hs-source-dirs: src- Exposed-modules:- Algebra.Absolute- Algebra.Additive- Algebra.Algebraic- Algebra.Differential- Algebra.DimensionTerm- Algebra.DivisibleSpace- Algebra.Field- Algebra.FloatingPoint- Algebra.Indexable- Algebra.IntegralDomain- Algebra.NonNegative- Algebra.Lattice- Algebra.Laws- Algebra.Module- Algebra.ModuleBasis- Algebra.Monoid- Algebra.NormedSpace.Euclidean- Algebra.NormedSpace.Maximum- Algebra.NormedSpace.Sum- Algebra.OccasionallyScalar- Algebra.PrincipalIdealDomain- Algebra.RealField- Algebra.RealIntegral- Algebra.RealRing- Algebra.RealTranscendental- Algebra.RightModule- Algebra.Ring- Algebra.ToInteger- Algebra.ToRational- Algebra.Transcendental- Algebra.Units- Algebra.Vector- Algebra.VectorSpace- Algebra.ZeroTestable- MathObj.Algebra- MathObj.DiscreteMap- MathObj.LaurentPolynomial- MathObj.Matrix- MathObj.Monoid- MathObj.PartialFraction- MathObj.Permutation- MathObj.Permutation.CycleList- MathObj.Permutation.CycleList.Check- MathObj.Permutation.Table- MathObj.Polynomial- MathObj.Polynomial.Core- MathObj.PowerSeries- MathObj.PowerSeries.Core- MathObj.PowerSeries.DifferentialEquation- MathObj.PowerSeries.Example- MathObj.PowerSeries.Mean- MathObj.PowerSeries2- MathObj.PowerSeries2.Core- MathObj.PowerSum- MathObj.RefinementMask2- MathObj.RootSet- MathObj.Wrapper.Haskell98- MathObj.Wrapper.NumericPrelude- Number.Complex- Number.DimensionTerm- Number.DimensionTerm.SI- Number.FixedPoint- Number.FixedPoint.Check- Number.GaloisField2p32m5- Number.NonNegative- Number.NonNegativeChunky- Number.PartiallyTranscendental- Number.Peano- Number.Positional- Number.Positional.Check- Number.Quaternion- Number.Ratio- Number.ResidueClass- Number.ResidueClass.Check- Number.ResidueClass.Maybe- Number.ResidueClass.Func- Number.ResidueClass.Reader- Number.Root- Number.OccasionallyScalarExpression- Number.SI.Unit- Number.SI- Number.Physical.Unit- Number.Physical.UnitDatabase- Number.Physical- Number.Physical.Read- Number.Physical.Show- NumericPrelude.List.Checked- NumericPrelude.List.Generic- NumericPrelude.Elementwise- NumericPrelude.Numeric- NumericPrelude.Base- NumericPrelude- Other-modules:- NumericPrelude.List- Algebra.AffineSpace- Algebra.RealRing98- MathObj.Gaussian.Variance- MathObj.Gaussian.Bell- MathObj.Gaussian.Polynomial- Number.ComplexSquareRoot- -- I think I won't add them this way.- -- It is certainly better to split the class into comparison and selection.- Algebra.EqualityDecision- Algebra.OrderDecision--Executable test- Hs-Source-Dirs: src, test- GHC-Options: -Wall- Main-Is: Test.hs-- If !flag(buildTests)- Buildable: False-- If impl(ghc>=7.0)- CPP-Options: -DNoImplicitPrelude=RebindableSyntax- Extensions: CPP--Executable testsuite- Hs-Source-Dirs: src, test- GHC-Options: -Wall- Other-modules:- Test.NumericPrelude.Utility- Test.Number.GaloisField2p32m5- Test.Number.ComplexSquareRoot- Test.Algebra.IntegralDomain- Test.Algebra.RealRing- Test.Algebra.Additive- Test.MathObj.RefinementMask2- Test.MathObj.PartialFraction- Test.MathObj.Matrix- Test.MathObj.Polynomial- Test.MathObj.PowerSeries- Test.MathObj.Gaussian.Variance- Test.MathObj.Gaussian.Bell- Test.MathObj.Gaussian.Polynomial- Main-Is: Test/Run.hs-- If flag(buildTests)- Build-Depends: HUnit >=1 && <2- Else- Buildable: False-- If impl(ghc>=7.0)- CPP-Options: -DNoImplicitPrelude=RebindableSyntax- Extensions: CPP--Executable test-gaussian- Hs-Source-Dirs: src, test- Main-Is: Gaussian.hs- Other-Modules:- MathObj.Gaussian.Example- If flag(buildTests)- Build-Depends:- gnuplot >=0.5 && <0.6,- HTam >=0.0.2 && <0.1- Else- Buildable: False-- If impl(ghc>=7.0)- CPP-Options: -DNoImplicitPrelude=RebindableSyntax- Extensions: CPP+Name: numeric-prelude +Version: 0.4 +x-revision: 1 +License: GPL +License-File: LICENSE +Author: Dylan Thurston <dpt@math.harvard.edu>, Henning Thielemann <numericprelude@henning-thielemann.de>, Mikael Johansson +Maintainer: Henning Thielemann <numericprelude@henning-thielemann.de> +Homepage: http://www.haskell.org/haskellwiki/Numeric_Prelude +Category: Math +Stability: Experimental +Tested-With: GHC==6.4.1, GHC==6.8.2, GHC==6.10.4, GHC==6.12.3 +Tested-With: GHC==7.2.2, GHC==7.4.1, GHC==7.6.3 +Cabal-Version: >=1.6 +Build-Type: Simple +Synopsis: An experimental alternative hierarchy of numeric type classes +Description: + Revisiting the Numeric Classes + . + The Prelude for Haskell 98 offers a well-considered set of numeric classes + which covers the standard numeric types + ('Integer', 'Int', 'Rational', 'Float', 'Double', 'Complex') quite well. + But they offer limited extensibility and have a few other flaws. + In this proposal we will revisit these classes, addressing the following concerns: + . + [1] The current Prelude defines no semantics for the fundamental operations. + For instance, presumably addition should be associative + (or come as close as feasible), + but this is not mentioned anywhere. + . + [2] There are some superfluous superclasses. + For instance, 'Eq' and 'Show' are superclasses of 'Num'. + Consider the data type + @ data IntegerFunction a = IF (a -> Integer) @ + One can reasonably define all the methods of 'Algebra.Ring.C' for + @IntegerFunction a@ (satisfying good semantics), + but it is impossible to define non-bottom instances of 'Eq' and 'Show'. + In general, superclass relationship should indicate + some semantic connection between the two classes. + . + [3] In a few cases, there is a mix of semantic operations and + representation-specific operations. + 'toInteger', 'toRational', + and the various operations in 'RealFloating' ('decodeFloat', ...) + are the main examples. + . + [4] In some cases, the hierarchy is not finely-grained enough: + Operations that are often defined independently are lumped together. + For instance, in a financial application one might want a type \"Dollar\", + or in a graphics application one might want a type \"Vector\". + It is reasonable to add two Vectors or Dollars, + but not, in general, reasonable to multiply them. + But the programmer is currently forced to define a method for '(*)' + when she defines a method for '(+)'. + . + In specifying the semantics of type classes, + I will state laws as follows: + . + > (a + b) + c === a + (b + c) + . + The intended meaning is extensional equality: + The rest of the program should behave in the same way + if one side is replaced with the other. + Unfortunately, the laws are frequently violated by standard instances; + the law above, for instance, fails for 'Float': + . + > (1e20 + (-1e20)) + 1.0 = 1.0 + > 1e20 + ((-1e20) + 1.0) = 0.0 + . + For inexact number types like floating point types, + thus these laws should be interpreted as guidelines rather than absolute rules. + In particular, the compiler is not allowed to use them for optimization. + Unless stated otherwise, default definitions should also be taken as laws. + . + Thanks to Brian Boutel, Joe English, William Lee Irwin II, Marcin + Kowalczyk, Ketil Malde, Tom Schrijvers, Ken Shan, and Henning + Thielemann for helpful comments. + . + . + Usage: + . + Write modules in the following style: + . + > [-# NoImplicitPrelude #-] + > module MyModule where + > + > ... various specific imports ... + > + > import NumericPrelude + . + Importing @NumericPrelude@ is almost the same as + . + > import NumericPrelude.Numeric + > import NumericPrelude.Base . + . + Instead of the @NoImplicitPrelude@ pragma + you could also write @import Prelude ()@ + but this will yield problems with numeric literals. + . + There are two wrapper types that allow types + to be used with both Haskell98 and NumericPrelude type classes + that are initially implemented for only one of them. + . + . + Scope & Limitations\/TODO: + . + * It might be desireable to split Ord up into Poset and Ord + (a total ordering). + This is not addressed here. + . + * In some cases, this hierarchy may not yet be fine-grained enough. + For instance, time spans (\"5 minutes\") can be added to times (\"12:34\"), + but two times are not addable. (\"12:34 + 8:23\") + As it stands, + users have to use a different operator for adding time spans to times + than for adding two time spans. + Similar issues arise for vector space et al. + This is a consciously-made tradeoff, but might be changed. + This becomes most serious when dealing with quantities with units + like @length\/distance^2@, for which @(*)@ as defined here is useless. + (One way to see the issue: should + @ f x y = iterate (x *) y @ + have principal type + @ (Ring.C a) => a -> a -> [a] @ + or something like + @ (Ring.C a, Module a b) => a -> b -> [b] @ + ?) + . + * I stuck with the Haskell 98 names. + In some cases I find them lacking. + Neglecting backwards compatibility, we have renamed classes as follows: + Num --> Additive, Ring, Absolute + Integral --> ToInteger, IntegralDomain, RealIntegral + Fractional --> Field + Floating --> Algebraic, Transcendental + Real --> ToRational + RealFrac --> RealRing, RealField + RealFloat --> RealTranscendental + . + . + Additional standard libraries might include Enum, IEEEFloat (including + the bulk of the functions in Haskell 98's RealFloat class), + VectorSpace, Ratio, and Lattice. + +Extra-Source-Files: + Makefile + docs/NOTES + docs/README + src/Algebra/GenerateRules.hs + +Flag splitBase + description: Choose the new smaller, split-up base package. + +Flag buildTests + description: Build test executables + default: False + +Source-Repository this + Tag: 0.4 + Type: darcs + Location: http://code.haskell.org/numeric-prelude/ + +Source-Repository head + Type: darcs + Location: http://code.haskell.org/numeric-prelude/ + +Library + Build-Depends: + parsec >=1 && <4, + QuickCheck >=1 && <3, + storable-record >=0.0.1 && <0.1, + non-negative >=0.0.5 && <0.2, + utility-ht >=0.0.6 && <0.1, + deepseq >=1.1 && <1.4 + If flag(splitBase) + Build-Depends: + base >= 4.5 && <5, + array >=0.1 && <0.5, + containers >=0.1 && <0.6, + random >=1.0 && <1.1 + Else + Build-Depends: base >= 1.0 && < 2 + + If impl(ghc>=7.0) + CPP-Options: -DNoImplicitPrelude=RebindableSyntax + Extensions: CPP + + GHC-Options: -Wall + Hs-source-dirs: src + Exposed-modules: + Algebra.Absolute + Algebra.Additive + Algebra.Algebraic + Algebra.Differential + Algebra.DimensionTerm + Algebra.DivisibleSpace + Algebra.Field + Algebra.FloatingPoint + Algebra.Indexable + Algebra.IntegralDomain + Algebra.NonNegative + Algebra.Lattice + Algebra.Laws + Algebra.Module + Algebra.ModuleBasis + Algebra.Monoid + Algebra.NormedSpace.Euclidean + Algebra.NormedSpace.Maximum + Algebra.NormedSpace.Sum + Algebra.OccasionallyScalar + Algebra.PrincipalIdealDomain + Algebra.RealField + Algebra.RealIntegral + Algebra.RealRing + Algebra.RealTranscendental + Algebra.RightModule + Algebra.Ring + Algebra.ToInteger + Algebra.ToRational + Algebra.Transcendental + Algebra.Units + Algebra.Vector + Algebra.VectorSpace + Algebra.ZeroTestable + MathObj.Algebra + MathObj.DiscreteMap + MathObj.LaurentPolynomial + MathObj.Matrix + MathObj.Monoid + MathObj.PartialFraction + MathObj.Permutation + MathObj.Permutation.CycleList + MathObj.Permutation.CycleList.Check + MathObj.Permutation.Table + MathObj.Polynomial + MathObj.Polynomial.Core + MathObj.PowerSeries + MathObj.PowerSeries.Core + MathObj.PowerSeries.DifferentialEquation + MathObj.PowerSeries.Example + MathObj.PowerSeries.Mean + MathObj.PowerSeries2 + MathObj.PowerSeries2.Core + MathObj.PowerSum + MathObj.RefinementMask2 + MathObj.RootSet + MathObj.Wrapper.Haskell98 + MathObj.Wrapper.NumericPrelude + Number.Complex + Number.DimensionTerm + Number.DimensionTerm.SI + Number.FixedPoint + Number.FixedPoint.Check + Number.GaloisField2p32m5 + Number.NonNegative + Number.NonNegativeChunky + Number.PartiallyTranscendental + Number.Peano + Number.Positional + Number.Positional.Check + Number.Quaternion + Number.Ratio + Number.ResidueClass + Number.ResidueClass.Check + Number.ResidueClass.Maybe + Number.ResidueClass.Func + Number.ResidueClass.Reader + Number.Root + Number.OccasionallyScalarExpression + Number.SI.Unit + Number.SI + Number.Physical.Unit + Number.Physical.UnitDatabase + Number.Physical + Number.Physical.Read + Number.Physical.Show + NumericPrelude.List.Checked + NumericPrelude.List.Generic + NumericPrelude.Elementwise + NumericPrelude.Numeric + NumericPrelude.Base + NumericPrelude + Other-modules: + NumericPrelude.List + Algebra.AffineSpace + Algebra.RealRing98 + MathObj.Gaussian.Variance + MathObj.Gaussian.Bell + MathObj.Gaussian.Polynomial + Number.ComplexSquareRoot + -- I think I won't add them this way. + -- It is certainly better to split the class into comparison and selection. + Algebra.EqualityDecision + Algebra.OrderDecision + +Executable test + Hs-Source-Dirs: src, test + GHC-Options: -Wall + Main-Is: Test.hs + + If !flag(buildTests) + Buildable: False + + If impl(ghc>=7.0) + CPP-Options: -DNoImplicitPrelude=RebindableSyntax + Extensions: CPP + +Executable testsuite + Hs-Source-Dirs: src, test + GHC-Options: -Wall + Other-modules: + Test.NumericPrelude.Utility + Test.Number.GaloisField2p32m5 + Test.Number.ComplexSquareRoot + Test.Algebra.IntegralDomain + Test.Algebra.RealRing + Test.Algebra.Additive + Test.MathObj.RefinementMask2 + Test.MathObj.PartialFraction + Test.MathObj.Matrix + Test.MathObj.Polynomial + Test.MathObj.PowerSeries + Test.MathObj.Gaussian.Variance + Test.MathObj.Gaussian.Bell + Test.MathObj.Gaussian.Polynomial + Main-Is: Test/Run.hs + + If flag(buildTests) + Build-Depends: HUnit >=1 && <2 + Else + Buildable: False + + If impl(ghc>=7.0) + CPP-Options: -DNoImplicitPrelude=RebindableSyntax + Extensions: CPP + +Executable test-gaussian + Hs-Source-Dirs: src, test + Main-Is: Gaussian.hs + Other-Modules: + MathObj.Gaussian.Example + If flag(buildTests) + Build-Depends: + gnuplot >=0.5 && <0.6, + HTam >=0.0.2 && <0.1 + Else + Buildable: False + + If impl(ghc>=7.0) + CPP-Options: -DNoImplicitPrelude=RebindableSyntax + Extensions: CPP