universe-instances-base 1.0 → 1.1
raw patch · 3 files changed
+37/−148 lines, 3 filesdep −containersdep ~universe-basenew-uploaderPVP ok
version bump matches the API change (PVP)
Dependencies removed: containers
Dependency ranges changed: universe-base
API changes (from Hackage documentation)
- Data.Universe.Instances.Base: instance (Finite a, Finite b) => Finite (Either a b)
- Data.Universe.Instances.Base: instance (Finite a, Finite b) => Finite (a, b)
- Data.Universe.Instances.Base: instance (Finite a, Finite b, Finite c) => Finite (a, b, c)
- Data.Universe.Instances.Base: instance (Finite a, Finite b, Finite c, Finite d) => Finite (a, b, c, d)
- Data.Universe.Instances.Base: instance (Finite a, Finite b, Finite c, Finite d, Finite e) => Finite (a, b, c, d, e)
- Data.Universe.Instances.Base: instance (Finite a, Ord a, Universe b) => Universe (a -> b)
- Data.Universe.Instances.Base: instance (Ord a, Finite a, Finite b) => Finite (a -> b)
- Data.Universe.Instances.Base: instance (Universe a, Universe b) => Universe (Either a b)
- Data.Universe.Instances.Base: instance (Universe a, Universe b) => Universe (a, b)
- Data.Universe.Instances.Base: instance (Universe a, Universe b, Universe c) => Universe (a, b, c)
- Data.Universe.Instances.Base: instance (Universe a, Universe b, Universe c, Universe d) => Universe (a, b, c, d)
- Data.Universe.Instances.Base: instance (Universe a, Universe b, Universe c, Universe d, Universe e) => Universe (a, b, c, d, e)
- Data.Universe.Instances.Base: instance Finite ()
- Data.Universe.Instances.Base: instance Finite All
- Data.Universe.Instances.Base: instance Finite Any
- Data.Universe.Instances.Base: instance Finite Bool
- Data.Universe.Instances.Base: instance Finite Char
- Data.Universe.Instances.Base: instance Finite Int
- Data.Universe.Instances.Base: instance Finite Int16
- Data.Universe.Instances.Base: instance Finite Int32
- Data.Universe.Instances.Base: instance Finite Int64
- Data.Universe.Instances.Base: instance Finite Int8
- Data.Universe.Instances.Base: instance Finite Ordering
- Data.Universe.Instances.Base: instance Finite Word
- Data.Universe.Instances.Base: instance Finite Word16
- Data.Universe.Instances.Base: instance Finite Word32
- Data.Universe.Instances.Base: instance Finite Word64
- Data.Universe.Instances.Base: instance Finite Word8
- Data.Universe.Instances.Base: instance Finite a => Finite (Dual a)
- Data.Universe.Instances.Base: instance Finite a => Finite (First a)
- Data.Universe.Instances.Base: instance Finite a => Finite (Last a)
- Data.Universe.Instances.Base: instance Finite a => Finite (Maybe a)
- Data.Universe.Instances.Base: instance Finite a => Finite (Product a)
- Data.Universe.Instances.Base: instance Finite a => Finite (Sum a)
- Data.Universe.Instances.Base: instance Universe ()
- Data.Universe.Instances.Base: instance Universe All
- Data.Universe.Instances.Base: instance Universe Any
- Data.Universe.Instances.Base: instance Universe Bool
- Data.Universe.Instances.Base: instance Universe Char
- Data.Universe.Instances.Base: instance Universe Int
- Data.Universe.Instances.Base: instance Universe Int16
- Data.Universe.Instances.Base: instance Universe Int32
- Data.Universe.Instances.Base: instance Universe Int64
- Data.Universe.Instances.Base: instance Universe Int8
- Data.Universe.Instances.Base: instance Universe Integer
- Data.Universe.Instances.Base: instance Universe Ordering
- Data.Universe.Instances.Base: instance Universe Word
- Data.Universe.Instances.Base: instance Universe Word16
- Data.Universe.Instances.Base: instance Universe Word32
- Data.Universe.Instances.Base: instance Universe Word64
- Data.Universe.Instances.Base: instance Universe Word8
- Data.Universe.Instances.Base: instance Universe a => Universe (Dual a)
- Data.Universe.Instances.Base: instance Universe a => Universe (First a)
- Data.Universe.Instances.Base: instance Universe a => Universe (Last a)
- Data.Universe.Instances.Base: instance Universe a => Universe (Maybe a)
- Data.Universe.Instances.Base: instance Universe a => Universe (Product a)
- Data.Universe.Instances.Base: instance Universe a => Universe (Sum a)
- Data.Universe.Instances.Base: instance Universe a => Universe [a]
- Data.Universe.Instances.Base: instance a ~ Integer => Universe (Ratio a)
+ Data.Universe.Instances.Base: cardinality :: Finite a => Tagged a Natural
Files
- Data/Universe/Instances/Base.hs +0/−125
- src/Data/Universe/Instances/Base.hs +5/−0
- universe-instances-base.cabal +32/−23
− Data/Universe/Instances/Base.hs
@@ -1,125 +0,0 @@-{-# LANGUAGE TypeFamilies #-}-module Data.Universe.Instances.Base (- -- | Instances of 'Universe' and 'Finite' for built-in types.- Universe(..), Finite(..)- ) where--import Control.Monad-import Data.Int-import Data.Map ((!), fromList)-import Data.Monoid-import Data.Ratio-import Data.Universe.Class-import Data.Universe.Helpers-import Data.Word--instance Universe () where universe = universeDef-instance Universe Bool where universe = universeDef-instance Universe Char where universe = universeDef-instance Universe Ordering where universe = universeDef-instance Universe Integer where universe = [0, -1..] +++ [1..]-instance Universe Int where universe = universeDef-instance Universe Int8 where universe = universeDef-instance Universe Int16 where universe = universeDef-instance Universe Int32 where universe = universeDef-instance Universe Int64 where universe = universeDef-instance Universe Word where universe = universeDef-instance Universe Word8 where universe = universeDef-instance Universe Word16 where universe = universeDef-instance Universe Word32 where universe = universeDef-instance Universe Word64 where universe = universeDef--instance (Universe a, Universe b) => Universe (Either a b) where universe = map Left universe +++ map Right universe-instance Universe a => Universe (Maybe a ) where universe = Nothing : map Just universe--instance (Universe a, Universe b) => Universe (a, b) where universe = universe +*+ universe-instance (Universe a, Universe b, Universe c) => Universe (a, b, c) where universe = [(a,b,c) | ((a,b),c) <- universe +*+ universe +*+ universe]-instance (Universe a, Universe b, Universe c, Universe d) => Universe (a, b, c, d) where universe = [(a,b,c,d) | (((a,b),c),d) <- universe +*+ universe +*+ universe +*+ universe]-instance (Universe a, Universe b, Universe c, Universe d, Universe e) => Universe (a, b, c, d, e) where universe = [(a,b,c,d,e) | ((((a,b),c),d),e) <- universe +*+ universe +*+ universe +*+ universe +*+ universe]--instance Universe a => Universe [a] where- universe = diagonal $ [[]] : [[h:t | t <- universe] | h <- universe]--instance Universe All where universe = map All universe-instance Universe Any where universe = map Any universe-instance Universe a => Universe (Sum a) where universe = map Sum universe-instance Universe a => Universe (Product a) where universe = map Product universe-instance Universe a => Universe (Dual a) where universe = map Dual universe-instance Universe a => Universe (First a) where universe = map First universe-instance Universe a => Universe (Last a) where universe = map Last universe---- see http://mathlesstraveled.com/2008/01/07/recounting-the-rationals-part-ii-fractions-grow-on-trees/------ also, Brent Yorgey writes:------ positiveRationals2 :: [Ratio Integer]--- positiveRationals2 = iterate' next 1--- where--- next x = let (n,y) = properFraction x in recip (fromInteger n + 1 - y)--- iterate' f x = let x' = f x in x' `seq` (x : iterate' f x')------ Compiling this code with -O2 and doing some informal tests seems to--- show that positiveRationals and positiveRationals2 have almost exactly--- the same efficiency for generating the entire list (e.g. the times for--- finding the sum of the first 100000 rationals are pretty much--- indistinguishable). positiveRationals is still the clear winner for--- generating just the nth rational for some particular n -- some simple--- experiments seem to indicate that doing this with positiveRationals2--- scales linearly while with positiveRationals it scales sub-linearly,--- as expected.------ Surprisingly, replacing % with :% in positiveRationals seems to make--- no appreciable difference.-positiveRationals :: [Ratio Integer]-positiveRationals = 1 : map lChild positiveRationals +++ map rChild positiveRationals where- lChild frac = numerator frac % (numerator frac + denominator frac)- rChild frac = (numerator frac + denominator frac) % denominator frac--instance a ~ Integer => Universe (Ratio a) where universe = 0 : map negate positiveRationals +++ positiveRationals---- could change the Ord constraint to an Eq one, but come on, how many finite--- types can't be ordered?-instance (Finite a, Ord a, Universe b) => Universe (a -> b) where- universe = map tableToFunction tables where- tables = choices [universe | _ <- monoUniverse]- tableToFunction = (!) . fromList . zip monoUniverse- monoUniverse = universeF--instance Finite ()-instance Finite Bool-instance Finite Char-instance Finite Ordering-instance Finite Int-instance Finite Int8-instance Finite Int16-instance Finite Int32-instance Finite Int64-instance Finite Word-instance Finite Word8-instance Finite Word16-instance Finite Word32-instance Finite Word64--instance Finite a => Finite (Maybe a )-instance (Finite a, Finite b) => Finite (Either a b) where universeF = map Left universe ++ map Right universe--instance (Finite a, Finite b) => Finite (a, b) where universeF = liftM2 (,) universeF universeF-instance (Finite a, Finite b, Finite c) => Finite (a, b, c) where universeF = liftM3 (,,) universeF universeF universeF-instance (Finite a, Finite b, Finite c, Finite d) => Finite (a, b, c, d) where universeF = liftM4 (,,,) universeF universeF universeF universeF-instance (Finite a, Finite b, Finite c, Finite d, Finite e) => Finite (a, b, c, d, e) where universeF = liftM5 (,,,,) universeF universeF universeF universeF universeF--instance Finite All where universeF = map All universeF-instance Finite Any where universeF = map Any universeF-instance Finite a => Finite (Sum a) where universeF = map Sum universeF-instance Finite a => Finite (Product a) where universeF = map Product universeF-instance Finite a => Finite (Dual a) where universeF = map Dual universeF-instance Finite a => Finite (First a) where universeF = map First universeF-instance Finite a => Finite (Last a) where universeF = map Last universeF--instance (Ord a, Finite a, Finite b) => Finite (a -> b) where- universeF = map tableToFunction tables where- tables = sequence [universeF | _ <- monoUniverse]- tableToFunction = (!) . fromList . zip monoUniverse- monoUniverse = universeF---- to add when somebody asks for it: instance (Eq a, Finite a) => Finite (Endo a) (+Universe)
+ src/Data/Universe/Instances/Base.hs view
@@ -0,0 +1,5 @@+module Data.Universe.Instances.Base+ {-# DEPRECATED "Use Data.Universe.Class from universe-base package" #-}+ (Universe(..), Finite(..)) where++import Data.Universe.Class (Universe (..), Finite (..))
universe-instances-base.cabal view
@@ -1,27 +1,36 @@-name: universe-instances-base-version: 1.0-synopsis: Universe instances for types from the base package-homepage: https://github.com/dmwit/universe-license: BSD3-license-file: LICENSE-author: Daniel Wagner-maintainer: me@dmwit.com-copyright: Daniel Wagner 2014-category: Data-build-type: Simple-cabal-version: >=1.10+name: universe-instances-base+version: 1.1+synopsis: Universe instances for types from the base package+description:+ __DEPRECATED:__ instances are moved to @universe-base@ package++ @universe-base@ package provides instances for types from GHC-boot libraries.++homepage: https://github.com/dmwit/universe+license: BSD3+license-file: LICENSE+author: Daniel Wagner+maintainer: me@dmwit.com+copyright: Daniel Wagner 2014+category: Data+build-type: Simple+cabal-version: >=1.10+tested-with:+ GHC ==8.8.1 || ==8.6.4 || ==8.4.4 || ==8.2.2 || ==8.0.2 || ==7.10.3 || ==7.8.4 || ==7.6.3 || ==7.4.2 || ==7.0.4+ source-repository head- type: git- location: https://github.com/dmwit/universe+ type: git+ location: https://github.com/dmwit/universe+ source-repository this- type: git- location: https://github.com/dmwit/universe- tag: 1.0+ type: git+ location: https://github.com/dmwit/universe+ tag: 1.1 library- exposed-modules: Data.Universe.Instances.Base- other-extensions: TypeFamilies- build-depends: base >=4 && <5,- containers >=0.5 && <0.6,- universe-base >=1.0 && <1.1- default-language: Haskell2010+ default-language: Haskell2010+ hs-source-dirs: src+ exposed-modules: Data.Universe.Instances.Base+ build-depends:+ base >=4 && <5+ , universe-base >=1.1 && <1.1.1