packages feed

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