packages feed

basement 0.0.7 → 0.0.8

raw patch · 13 files changed

+228/−68 lines, 13 filesdep ~basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: base

API changes (from Hackage documentation)

- Basement.Block.Builder: instance Data.Semigroup.Semigroup Basement.Block.Builder.Builder
- Basement.BoxedArray: instance Data.Semigroup.Semigroup (Basement.BoxedArray.Array a)
- Basement.Sized.Block: instance (Data.Data.Data a, GHC.TypeNats.KnownNat n) => Data.Data.Data (Basement.Sized.Block.BlockN n a)
- Basement.Sized.Block: instance (GHC.Classes.Ord a, Basement.PrimType.PrimType a) => GHC.Classes.Ord (Basement.Sized.Block.BlockN n a)
- Basement.Sized.Block: instance (GHC.Show.Show a, Basement.PrimType.PrimType a) => GHC.Show.Show (Basement.Sized.Block.BlockN n a)
- Basement.Sized.UVect: instance (GHC.Show.Show a, Basement.PrimType.PrimType a) => GHC.Show.Show (Basement.Sized.UVect.UVect n a)
- Basement.String.Builder: instance Data.Semigroup.Semigroup Basement.String.Builder.Builder
- Basement.These: instance (GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Basement.These.These a b)
- Basement.These: instance (GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Basement.These.These a b)
- Basement.These: instance (GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Basement.These.These a b)
- Basement.Types.AsciiString: instance Data.Semigroup.Semigroup Basement.Types.AsciiString.AsciiString
- Basement.Types.OffsetSize: instance Data.Semigroup.Semigroup (Basement.Types.OffsetSize.CountOf ty)
+ Basement.Block.Builder: instance GHC.Base.Semigroup Basement.Block.Builder.Builder
+ Basement.BoxedArray: instance GHC.Base.Semigroup (Basement.BoxedArray.Array a)
+ Basement.Sized.Block: instance (Basement.PrimType.PrimType a, GHC.Classes.Ord a) => GHC.Classes.Ord (Basement.Sized.Block.BlockN n a)
+ Basement.Sized.Block: instance (Basement.PrimType.PrimType a, GHC.Show.Show a) => GHC.Show.Show (Basement.Sized.Block.BlockN n a)
+ Basement.Sized.Block: instance (GHC.TypeNats.KnownNat n, Data.Data.Data a) => Data.Data.Data (Basement.Sized.Block.BlockN n a)
+ Basement.Sized.UVect: instance (Basement.PrimType.PrimType a, GHC.Show.Show a) => GHC.Show.Show (Basement.Sized.UVect.UVect n a)
+ Basement.String.Builder: instance GHC.Base.Semigroup Basement.String.Builder.Builder
+ Basement.These: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Basement.These.These a b)
+ Basement.These: instance (GHC.Classes.Ord a, GHC.Classes.Ord b) => GHC.Classes.Ord (Basement.These.These a b)
+ Basement.These: instance (GHC.Show.Show a, GHC.Show.Show b) => GHC.Show.Show (Basement.These.These a b)
+ Basement.Types.AsciiString: instance GHC.Base.Semigroup Basement.Types.AsciiString.AsciiString
+ Basement.Types.Char7: c7Lower :: Char7 -> Char7
+ Basement.Types.Char7: c7Upper :: Char7 -> Char7
+ Basement.Types.CharUTF8: CharUTF8 :: Word32 -> CharUTF8
+ Basement.Types.CharUTF8: decodeCharUTF8 :: CharUTF8 -> Char
+ Basement.Types.CharUTF8: encodeCharUTF8 :: Char -> CharUTF8
+ Basement.Types.CharUTF8: newtype CharUTF8
+ Basement.Types.OffsetSize: instance GHC.Base.Semigroup (Basement.Types.OffsetSize.CountOf ty)
- Basement.Compat.Base: ($!) :: () => (a -> b) -> a -> b
+ Basement.Compat.Base: ($!) :: () => a -> b -> a -> b
- Basement.Compat.Base: ($) :: () => (a -> b) -> a -> b
+ Basement.Compat.Base: ($) :: () => a -> b -> a -> b
- Basement.Compat.Base: (.) :: Category k cat => forall (b :: k) (c :: k) (a :: k). () => cat b c -> cat a b -> cat a c
+ Basement.Compat.Base: (.) :: Category cat => cat b c -> cat a b -> cat a c
- Basement.Compat.Base: (<$>) :: Functor f => (a -> b) -> f a -> f b
+ Basement.Compat.Base: (<$>) :: Functor f => a -> b -> f a -> f b
- Basement.Compat.Base: (<*>) :: Applicative f => f (a -> b) -> f a -> f b
+ Basement.Compat.Base: (<*>) :: Applicative f => f a -> b -> f a -> f b
- Basement.Compat.Base: (<>) :: Monoid m => m -> m -> m
+ Basement.Compat.Base: (<>) :: Semigroup a => a -> a -> a
- Basement.Compat.Base: (>>=) :: Monad m => m a -> (a -> m b) -> m b
+ Basement.Compat.Base: (>>=) :: Monad m => m a -> a -> m b -> m b
- Basement.Compat.Base: class Typeable * a => Data a
+ Basement.Compat.Base: class Typeable a => Data a
- Basement.Compat.Base: class (Typeable * e, Show e) => Exception e
+ Basement.Compat.Base: class (Typeable e, Show e) => Exception e
- Basement.Compat.Base: class Monoid a
+ Basement.Compat.Base: class Semigroup a => Monoid a
- Basement.Compat.Base: class Typeable k (a :: k)
+ Basement.Compat.Base: class Typeable (a :: k)
- Basement.Compat.Base: data Bool :: *
+ Basement.Compat.Base: data Bool
- Basement.Compat.Base: data Char :: *
+ Basement.Compat.Base: data Char
- Basement.Compat.Base: data DataType :: *
+ Basement.Compat.Base: data DataType
- Basement.Compat.Base: data Double :: *
+ Basement.Compat.Base: data Double
- Basement.Compat.Base: data Either a b :: * -> * -> *
+ Basement.Compat.Base: data Either a b
- Basement.Compat.Base: data Float :: *
+ Basement.Compat.Base: data Float
- Basement.Compat.Base: data IO a :: * -> *
+ Basement.Compat.Base: data IO a
- Basement.Compat.Base: data Int :: *
+ Basement.Compat.Base: data Int
- Basement.Compat.Base: data Int16 :: *
+ Basement.Compat.Base: data Int16
- Basement.Compat.Base: data Int32 :: *
+ Basement.Compat.Base: data Int32
- Basement.Compat.Base: data Int64 :: *
+ Basement.Compat.Base: data Int64
- Basement.Compat.Base: data Int8 :: *
+ Basement.Compat.Base: data Int8
- Basement.Compat.Base: data Integer :: *
+ Basement.Compat.Base: data Integer
- Basement.Compat.Base: data Maybe a :: * -> *
+ Basement.Compat.Base: data Maybe a
- Basement.Compat.Base: data Ordering :: *
+ Basement.Compat.Base: data Ordering
- Basement.Compat.Base: data Ptr a :: * -> *
+ Basement.Compat.Base: data Ptr a
- Basement.Compat.Base: data Word :: *
+ Basement.Compat.Base: data Word
- Basement.Compat.Base: data Word16 :: *
+ Basement.Compat.Base: data Word16
- Basement.Compat.Base: data Word32 :: *
+ Basement.Compat.Base: data Word32
- Basement.Compat.Base: data Word64 :: *
+ Basement.Compat.Base: data Word64
- Basement.Compat.Base: data Word8 :: *
+ Basement.Compat.Base: data Word8
- Basement.Compat.Base: dataCast1 :: (Data a, Typeable (* -> *) t) => (forall d. Data d => c t d) -> Maybe c a
+ Basement.Compat.Base: dataCast1 :: (Data a, Typeable t) => forall d. Data d => c t d -> Maybe c a
- Basement.Compat.Base: dataCast2 :: (Data a, Typeable (* -> * -> *) t) => (forall d e. (Data d, Data e) => c t d e) -> Maybe c a
+ Basement.Compat.Base: dataCast2 :: (Data a, Typeable t) => forall d e. (Data d, Data e) => c t d e -> Maybe c a
- Basement.Compat.Base: either :: () => (a -> c) -> (b -> c) -> Either a b -> c
+ Basement.Compat.Base: either :: () => a -> c -> b -> c -> Either a b -> c
- Basement.Compat.Base: flip :: () => (a -> b -> c) -> b -> a -> c
+ Basement.Compat.Base: flip :: () => a -> b -> c -> b -> a -> c
- Basement.Compat.Base: fmap :: Functor f => (a -> b) -> f a -> f b
+ Basement.Compat.Base: fmap :: Functor f => a -> b -> f a -> f b
- Basement.Compat.Base: gfoldl :: Data a => (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. () => g -> c g) -> a -> c a
+ Basement.Compat.Base: gfoldl :: Data a => forall d b. Data d => c d -> b -> d -> c b -> forall g. () => g -> c g -> a -> c a
- Basement.Compat.Base: gmapM :: (Data a, Monad m) => (forall d. Data d => d -> m d) -> a -> m a
+ Basement.Compat.Base: gmapM :: (Data a, Monad m) => forall d. Data d => d -> m d -> a -> m a
- Basement.Compat.Base: gmapMo :: (Data a, MonadPlus m) => (forall d. Data d => d -> m d) -> a -> m a
+ Basement.Compat.Base: gmapMo :: (Data a, MonadPlus m) => forall d. Data d => d -> m d -> a -> m a
- Basement.Compat.Base: gmapMp :: (Data a, MonadPlus m) => (forall d. Data d => d -> m d) -> a -> m a
+ Basement.Compat.Base: gmapMp :: (Data a, MonadPlus m) => forall d. Data d => d -> m d -> a -> m a
- Basement.Compat.Base: gmapQ :: Data a => (forall d. Data d => d -> u) -> a -> [u]
+ Basement.Compat.Base: gmapQ :: Data a => forall d. Data d => d -> u -> a -> [u]
- Basement.Compat.Base: gmapQi :: Data a => Int -> (forall d. Data d => d -> u) -> a -> u
+ Basement.Compat.Base: gmapQi :: Data a => Int -> forall d. Data d => d -> u -> a -> u
- Basement.Compat.Base: gmapQl :: Data a => (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r
+ Basement.Compat.Base: gmapQl :: Data a => r -> r' -> r -> r -> forall d. Data d => d -> r' -> a -> r
- Basement.Compat.Base: gmapQr :: Data a => (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r
+ Basement.Compat.Base: gmapQr :: Data a => r' -> r -> r -> r -> forall d. Data d => d -> r' -> a -> r
- Basement.Compat.Base: gmapT :: Data a => (forall b. Data b => b -> b) -> a -> a
+ Basement.Compat.Base: gmapT :: Data a => forall b. Data b => b -> b -> a -> a
- Basement.Compat.Base: gunfold :: Data a => (forall b r. Data b => c (b -> r) -> c r) -> (forall r. () => r -> c r) -> Constr -> c a
+ Basement.Compat.Base: gunfold :: Data a => forall b r. Data b => c b -> r -> c r -> forall r. () => r -> c r -> Constr -> c a
- Basement.Compat.Base: id :: Category k cat => forall (a :: k). () => cat a a
+ Basement.Compat.Base: id :: Category cat => cat a a
- Basement.Compat.Base: liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
+ Basement.Compat.Base: liftA2 :: Applicative f => a -> b -> c -> f a -> f b -> f c
- Basement.Compat.Base: maybe :: () => b -> (a -> b) -> Maybe a -> b
+ Basement.Compat.Base: maybe :: () => b -> a -> b -> Maybe a -> b
- Basement.Compat.Bifunctor: bimap :: Bifunctor p => (a -> b) -> (c -> d) -> p a c -> p b d
+ Basement.Compat.Bifunctor: bimap :: Bifunctor p => a -> b -> c -> d -> p a c -> p b d
- Basement.Compat.Bifunctor: first :: Bifunctor p => (a -> b) -> p a c -> p b c
+ Basement.Compat.Bifunctor: first :: Bifunctor p => a -> b -> p a c -> p b c
- Basement.Compat.Bifunctor: second :: Bifunctor p => (b -> c) -> p a b -> p a c
+ Basement.Compat.Bifunctor: second :: Bifunctor p => b -> c -> p a b -> p a c
- Basement.Compat.C.Types: data CDouble :: *
+ Basement.Compat.C.Types: data CDouble
- Basement.Compat.C.Types: newtype CBool :: *
+ Basement.Compat.C.Types: newtype CBool
- Basement.Compat.C.Types: newtype CChar :: *
+ Basement.Compat.C.Types: newtype CChar
- Basement.Compat.C.Types: newtype CClock :: *
+ Basement.Compat.C.Types: newtype CClock
- Basement.Compat.C.Types: newtype CFloat :: *
+ Basement.Compat.C.Types: newtype CFloat
- Basement.Compat.C.Types: newtype CInt :: *
+ Basement.Compat.C.Types: newtype CInt
- Basement.Compat.C.Types: newtype CIntMax :: *
+ Basement.Compat.C.Types: newtype CIntMax
- Basement.Compat.C.Types: newtype CIntPtr :: *
+ Basement.Compat.C.Types: newtype CIntPtr
- Basement.Compat.C.Types: newtype CLLong :: *
+ Basement.Compat.C.Types: newtype CLLong
- Basement.Compat.C.Types: newtype CLong :: *
+ Basement.Compat.C.Types: newtype CLong
- Basement.Compat.C.Types: newtype CMode :: *
+ Basement.Compat.C.Types: newtype CMode
- Basement.Compat.C.Types: newtype COff :: *
+ Basement.Compat.C.Types: newtype COff
- Basement.Compat.C.Types: newtype CPtrdiff :: *
+ Basement.Compat.C.Types: newtype CPtrdiff
- Basement.Compat.C.Types: newtype CSChar :: *
+ Basement.Compat.C.Types: newtype CSChar
- Basement.Compat.C.Types: newtype CSUSeconds :: *
+ Basement.Compat.C.Types: newtype CSUSeconds
- Basement.Compat.C.Types: newtype CShort :: *
+ Basement.Compat.C.Types: newtype CShort
- Basement.Compat.C.Types: newtype CSigAtomic :: *
+ Basement.Compat.C.Types: newtype CSigAtomic
- Basement.Compat.C.Types: newtype CSize :: *
+ Basement.Compat.C.Types: newtype CSize
- Basement.Compat.C.Types: newtype CTime :: *
+ Basement.Compat.C.Types: newtype CTime
- Basement.Compat.C.Types: newtype CUChar :: *
+ Basement.Compat.C.Types: newtype CUChar
- Basement.Compat.C.Types: newtype CUInt :: *
+ Basement.Compat.C.Types: newtype CUInt
- Basement.Compat.C.Types: newtype CUIntMax :: *
+ Basement.Compat.C.Types: newtype CUIntMax
- Basement.Compat.C.Types: newtype CUIntPtr :: *
+ Basement.Compat.C.Types: newtype CUIntPtr
- Basement.Compat.C.Types: newtype CULLong :: *
+ Basement.Compat.C.Types: newtype CULLong
- Basement.Compat.C.Types: newtype CULong :: *
+ Basement.Compat.C.Types: newtype CULong
- Basement.Compat.C.Types: newtype CUSeconds :: *
+ Basement.Compat.C.Types: newtype CUSeconds
- Basement.Compat.C.Types: newtype CUShort :: *
+ Basement.Compat.C.Types: newtype CUShort
- Basement.Compat.C.Types: newtype CWchar :: *
+ Basement.Compat.C.Types: newtype CWchar
- Basement.Compat.Identity: newtype Identity a :: * -> *
+ Basement.Compat.Identity: newtype Identity a
- Basement.Compat.MonadTrans: Reader :: (r -> m a) -> Reader r m a
+ Basement.Compat.MonadTrans: Reader :: r -> m a -> Reader r m a
- Basement.Compat.MonadTrans: State :: (s -> m (a, s)) -> State s m a
+ Basement.Compat.MonadTrans: State :: s -> m (a, s) -> State s m a
- Basement.Compat.Natural: data Natural :: *
+ Basement.Compat.Natural: data Natural
- Basement.Compat.Primitive: data Word :: *
+ Basement.Compat.Primitive: data Word
- Basement.Compat.Typeable: class Typeable k (a :: k)
+ Basement.Compat.Typeable: class Typeable (a :: k)
- Basement.Imports: ($!) :: () => (a -> b) -> a -> b
+ Basement.Imports: ($!) :: () => a -> b -> a -> b
- Basement.Imports: ($) :: () => (a -> b) -> a -> b
+ Basement.Imports: ($) :: () => a -> b -> a -> b
- Basement.Imports: (.) :: Category k cat => forall (b :: k) (c :: k) (a :: k). () => cat b c -> cat a b -> cat a c
+ Basement.Imports: (.) :: Category cat => cat b c -> cat a b -> cat a c
- Basement.Imports: (<$>) :: Functor f => (a -> b) -> f a -> f b
+ Basement.Imports: (<$>) :: Functor f => a -> b -> f a -> f b
- Basement.Imports: (<*>) :: Applicative f => f (a -> b) -> f a -> f b
+ Basement.Imports: (<*>) :: Applicative f => f a -> b -> f a -> f b
- Basement.Imports: (>>=) :: Monad m => m a -> (a -> m b) -> m b
+ Basement.Imports: (>>=) :: Monad m => m a -> a -> m b -> m b
- Basement.Imports: class Typeable * a => Data a
+ Basement.Imports: class Typeable a => Data a
- Basement.Imports: class (Typeable * e, Show e) => Exception e
+ Basement.Imports: class (Typeable e, Show e) => Exception e
- Basement.Imports: class Monoid a
+ Basement.Imports: class Semigroup a => Monoid a
- Basement.Imports: class Typeable k (a :: k)
+ Basement.Imports: class Typeable (a :: k)
- Basement.Imports: data Bool :: *
+ Basement.Imports: data Bool
- Basement.Imports: data Char :: *
+ Basement.Imports: data Char
- Basement.Imports: data DataType :: *
+ Basement.Imports: data DataType
- Basement.Imports: data Double :: *
+ Basement.Imports: data Double
- Basement.Imports: data Either a b :: * -> * -> *
+ Basement.Imports: data Either a b
- Basement.Imports: data Float :: *
+ Basement.Imports: data Float
- Basement.Imports: data IO a :: * -> *
+ Basement.Imports: data IO a
- Basement.Imports: data Int :: *
+ Basement.Imports: data Int
- Basement.Imports: data Int16 :: *
+ Basement.Imports: data Int16
- Basement.Imports: data Int32 :: *
+ Basement.Imports: data Int32
- Basement.Imports: data Int64 :: *
+ Basement.Imports: data Int64
- Basement.Imports: data Int8 :: *
+ Basement.Imports: data Int8
- Basement.Imports: data Integer :: *
+ Basement.Imports: data Integer
- Basement.Imports: data Maybe a :: * -> *
+ Basement.Imports: data Maybe a
- Basement.Imports: data Natural :: *
+ Basement.Imports: data Natural
- Basement.Imports: data Ordering :: *
+ Basement.Imports: data Ordering
- Basement.Imports: data Ptr a :: * -> *
+ Basement.Imports: data Ptr a
- Basement.Imports: data Word :: *
+ Basement.Imports: data Word
- Basement.Imports: data Word16 :: *
+ Basement.Imports: data Word16
- Basement.Imports: data Word32 :: *
+ Basement.Imports: data Word32
- Basement.Imports: data Word64 :: *
+ Basement.Imports: data Word64
- Basement.Imports: data Word8 :: *
+ Basement.Imports: data Word8
- Basement.Imports: dataCast1 :: (Data a, Typeable (* -> *) t) => (forall d. Data d => c t d) -> Maybe c a
+ Basement.Imports: dataCast1 :: (Data a, Typeable t) => forall d. Data d => c t d -> Maybe c a
- Basement.Imports: dataCast2 :: (Data a, Typeable (* -> * -> *) t) => (forall d e. (Data d, Data e) => c t d e) -> Maybe c a
+ Basement.Imports: dataCast2 :: (Data a, Typeable t) => forall d e. (Data d, Data e) => c t d e -> Maybe c a
- Basement.Imports: either :: () => (a -> c) -> (b -> c) -> Either a b -> c
+ Basement.Imports: either :: () => a -> c -> b -> c -> Either a b -> c
- Basement.Imports: flip :: () => (a -> b -> c) -> b -> a -> c
+ Basement.Imports: flip :: () => a -> b -> c -> b -> a -> c
- Basement.Imports: fmap :: Functor f => (a -> b) -> f a -> f b
+ Basement.Imports: fmap :: Functor f => a -> b -> f a -> f b
- Basement.Imports: gfoldl :: Data a => (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. () => g -> c g) -> a -> c a
+ Basement.Imports: gfoldl :: Data a => forall d b. Data d => c d -> b -> d -> c b -> forall g. () => g -> c g -> a -> c a
- Basement.Imports: gmapM :: (Data a, Monad m) => (forall d. Data d => d -> m d) -> a -> m a
+ Basement.Imports: gmapM :: (Data a, Monad m) => forall d. Data d => d -> m d -> a -> m a
- Basement.Imports: gmapMo :: (Data a, MonadPlus m) => (forall d. Data d => d -> m d) -> a -> m a
+ Basement.Imports: gmapMo :: (Data a, MonadPlus m) => forall d. Data d => d -> m d -> a -> m a
- Basement.Imports: gmapMp :: (Data a, MonadPlus m) => (forall d. Data d => d -> m d) -> a -> m a
+ Basement.Imports: gmapMp :: (Data a, MonadPlus m) => forall d. Data d => d -> m d -> a -> m a
- Basement.Imports: gmapQ :: Data a => (forall d. Data d => d -> u) -> a -> [u]
+ Basement.Imports: gmapQ :: Data a => forall d. Data d => d -> u -> a -> [u]
- Basement.Imports: gmapQi :: Data a => Int -> (forall d. Data d => d -> u) -> a -> u
+ Basement.Imports: gmapQi :: Data a => Int -> forall d. Data d => d -> u -> a -> u
- Basement.Imports: gmapQl :: Data a => (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r
+ Basement.Imports: gmapQl :: Data a => r -> r' -> r -> r -> forall d. Data d => d -> r' -> a -> r
- Basement.Imports: gmapQr :: Data a => (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r
+ Basement.Imports: gmapQr :: Data a => r' -> r -> r -> r -> forall d. Data d => d -> r' -> a -> r
- Basement.Imports: gmapT :: Data a => (forall b. Data b => b -> b) -> a -> a
+ Basement.Imports: gmapT :: Data a => forall b. Data b => b -> b -> a -> a
- Basement.Imports: gunfold :: Data a => (forall b r. Data b => c (b -> r) -> c r) -> (forall r. () => r -> c r) -> Constr -> c a
+ Basement.Imports: gunfold :: Data a => forall b r. Data b => c b -> r -> c r -> forall r. () => r -> c r -> Constr -> c a
- Basement.Imports: id :: Category k cat => forall (a :: k). () => cat a a
+ Basement.Imports: id :: Category cat => cat a a
- Basement.Imports: liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
+ Basement.Imports: liftA2 :: Applicative f => a -> b -> c -> f a -> f b -> f c
- Basement.Imports: maybe :: () => b -> (a -> b) -> Maybe a -> b
+ Basement.Imports: maybe :: () => b -> a -> b -> Maybe a -> b
- Basement.Nat: data Nat :: *
+ Basement.Nat: data Nat
- Basement.Nat: type (<=) (x :: Nat) (y :: Nat) = (~) Bool (<=?) x y True
+ Basement.Nat: type (<=) (x :: Nat) (y :: Nat) = x <=? y ~ True
- Basement.Sized.Block: intersperse :: (CmpNat n 1 ~ 'GT, PrimType ty) => ty -> BlockN n ty -> BlockN ((n + n) - 1) ty
+ Basement.Sized.Block: intersperse :: (CmpNat n 1 ~ 'GT, PrimType ty) => ty -> BlockN n ty -> BlockN (n + n - 1) ty
- Basement.Sized.UVect: intersperse :: (CmpNat n 1 ~ 'GT, PrimType ty) => ty -> UVect n ty -> UVect ((n + n) - 1) ty
+ Basement.Sized.UVect: intersperse :: (CmpNat n 1 ~ 'GT, PrimType ty) => ty -> UVect n ty -> UVect (n + n - 1) ty
- Basement.Sized.Vect: intersperse :: (CmpNat n 1 ~ 'GT) => ty -> Vect n ty -> Vect ((n + n) - 1) ty
+ Basement.Sized.Vect: intersperse :: (CmpNat n 1 ~ 'GT) => ty -> Vect n ty -> Vect (n + n - 1) ty
- Basement.Types.Ptr: data Ptr a :: * -> *
+ Basement.Types.Ptr: data Ptr a

Files

Basement/Alg/String.hs view
@@ -39,9 +39,9 @@     loop !d !s         | s == end  = pure (offsetAsSize d)         | otherwise =-            let !h = index src s+            let !h = nextAscii src s              in case headerIsAscii h of-                    True | predicate (toChar1 h) -> primMbaWrite dst d h >> loop (d + Offset 1) (s + Offset 1)+                    True | predicate (toChar1 h) -> primMbaWrite dst d (stepAsciiRawValue h) >> loop (d + Offset 1) (s + Offset 1)                          | otherwise             -> loop d (s + Offset 1)                     False ->                         case next src s of@@ -58,10 +58,10 @@   where     loop4 !ofs         | ofs4 < end =-            let h1 = index ba ofs-                h2 = index ba (ofs+1)-                h3 = index ba (ofs+2)-                h4 = index ba (ofs+3)+            let h1 = nextAscii ba ofs+                h2 = nextAscii ba (ofs+1)+                h3 = nextAscii ba (ofs+2)+                h4 = nextAscii ba (ofs+3)              in if headerIsAscii h1 && headerIsAscii h2 && headerIsAscii h3 && headerIsAscii h4                     then loop4 ofs4                     else loop ofs@@ -73,7 +73,7 @@         | headerIsAscii h = loop (ofs + Offset 1)         | otherwise       = multi (CountOf $ getNbBytes h) ofs       where-        h = index ba ofs+        h = nextAscii ba ofs      multi (CountOf 0xff) pos = (pos, Just InvalidHeader)     multi nbConts pos
Basement/Alg/UTF8.hs view
@@ -9,8 +9,10 @@     , expectAscii     , next     , nextSkip+    , nextWith     , prev     , prevSkip+    , writeASCII     , writeUTF8     , toList     , all@@ -32,6 +34,7 @@ import           Basement.Numerical.Additive import           Basement.Numerical.Subtractive import           Basement.Types.OffsetSize+import           Basement.Types.Char7 (Char7(..)) import           Basement.PrimType import           Basement.UTF8.Helper import           Basement.UTF8.Table@@ -62,15 +65,31 @@         3 -> Step (toChar4 h (index ba (n + Offset 1))                              (index ba (n + Offset 2))                              (index ba (n + Offset 3))) (n + Offset 4)-        r -> error ("next: internal error: invalid input: offset=" <> show n <> " table=" <> show r <> " h=" <> show h)+        r -> error ("next: internal error: invalid input: offset=" <> show n <> " table=" <> show r <> " h=" <> show (stepAsciiRawValue h))   where-    !h = index ba n+    !h = nextAscii ba n {-# INLINE next #-}  nextSkip :: Indexable container Word8 => container -> Offset Word8 -> Offset Word8-nextSkip ba n = n + 1 + Offset (getNbBytes (index ba n))+nextSkip ba n = n + 1 + Offset (getNbBytes (nextAscii ba n)) {-# INLINE nextSkip #-} +-- | special case for only non ascii next'er function+nextWith :: Indexable container Word8+         => StepASCII+         -> container+         -> Offset8+         -> Step+nextWith h ba n =+    case getNbBytes h of+        1 -> Step (toChar2 h (index ba n)) (n + Offset 1)+        2 -> Step (toChar3 h (index ba n) (index ba (n + Offset 1))) (n + Offset 2)+        3 -> Step (toChar4 h (index ba n)+                             (index ba (n + Offset 1))+                             (index ba (n + Offset 2))) (n + Offset 3)+        r -> error ("nextWith: internal error: invalid input: offset=" <> show n <> " table=" <> show r <> " h=" <> show (stepAsciiRawValue h))+{-# INLINE nextWith #-}+ -- Given a non null offset, give the previous character and the offset of this character -- will fail bad if apply at the beginning of string or an empty string. prev :: Indexable container Word8 => container -> Offset Word8 -> StepBack@@ -104,7 +123,12 @@         | isContinuation (index ba o) = loop (o `offsetMinusE` sz1)         | otherwise                       = o -writeUTF8 :: (PrimMonad prim, RandomAccess container prim Word8) +writeASCII :: (PrimMonad prim, RandomAccess container prim Word8)+           => container -> Offset8 -> Char7 -> prim ()+writeASCII mba !i (Char7 c) = write mba i c+{-# INLINE writeASCII #-}++writeUTF8 :: (PrimMonad prim, RandomAccess container prim Word8)           => container -> Offset8 -> Char -> prim Offset8 writeUTF8 mba !i !c     | bool# (ltWord# x 0x80##   ) = encode1@@ -245,24 +269,24 @@   where     loop !d !s         | s == end        = pure ()-        | headerIsAscii h = primMbaWrite dst d h >> loop (d `offsetSub` 1) (s + 1)+        | headerIsAscii h = primMbaWrite dst d (stepAsciiRawValue h) >> loop (d `offsetSub` 1) (s + 1)         | otherwise       = do             case getNbBytes h of                 1 -> do-                    primMbaWrite dst (d `offsetSub` 1) h+                    primMbaWrite dst (d `offsetSub` 1) (stepAsciiRawValue h)                     primMbaWrite dst d                 (index src (s + 1))                     loop (d `offsetSub` 2) (s + 2)                 2 -> do-                    primMbaWrite dst (d `offsetSub` 2) h+                    primMbaWrite dst (d `offsetSub` 2) (stepAsciiRawValue h)                     primMbaWrite dst (d `offsetSub` 1) (index src (s + 1))                     primMbaWrite dst d                 (index src (s + 2))                     loop (d `offsetSub` 3) (s + 3)                 3 -> do-                    primMbaWrite dst (d `offsetSub` 3) h+                    primMbaWrite dst (d `offsetSub` 3) (stepAsciiRawValue h)                     primMbaWrite dst (d `offsetSub` 2) (index src (s + 1))                     primMbaWrite dst (d `offsetSub` 1) (index src (s + 2))                     primMbaWrite dst d                 (index src (s + 3))                     loop (d `offsetSub` 4) (s + 4)                 _ -> error "impossible"-      where h = index src s+      where h = nextAscii src s {-# INLINE reverse #-}
Basement/Nat.hs view
@@ -8,6 +8,9 @@ {-# LANGUAGE ScopedTypeVariables       #-} {-# LANGUAGE UndecidableInstances      #-} {-# LANGUAGE ConstraintKinds           #-}+#if __GLASGOW_HASKELL__ >= 806+{-# LANGUAGE NoStarIsType              #-}+#endif module Basement.Nat     ( Nat     , KnownNat
Basement/Sized/Block.hs view
@@ -5,12 +5,16 @@ -- -- A Nat-sized version of Block {-# LANGUAGE AllowAmbiguousTypes        #-}+{-# LANGUAGE CPP                        #-}+{-# LANGUAGE ConstraintKinds            #-} {-# LANGUAGE DataKinds                  #-}-{-# LANGUAGE TypeOperators              #-}-{-# LANGUAGE TypeApplications           #-}-{-# LANGUAGE ScopedTypeVariables        #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE ConstraintKinds            #-}+{-# LANGUAGE ScopedTypeVariables        #-}+{-# LANGUAGE TypeApplications           #-}+{-# LANGUAGE TypeOperators              #-}+#if __GLASGOW_HASKELL__ >= 806+{-# LANGUAGE NoStarIsType               #-}+#endif  module Basement.Sized.Block     ( BlockN
Basement/String.hs view
@@ -127,6 +127,8 @@ import           Basement.Alg.Class (Indexable) import qualified Basement.Alg.UTF8 as UTF8 import qualified Basement.Alg.String as Alg+import           Basement.Types.Char7 (Char7(..), c7Upper, c7Lower)+import qualified Basement.Types.Char7 as Char7 import           GHC.Prim import           GHC.ST import           GHC.Types@@ -194,7 +196,7 @@                 (pos, Just failure) -> return (pos, Just failure)      one pos = do-        h <- Vec.unsafeRead mba pos+        h <- StepASCII <$> Vec.unsafeRead mba pos         let nbConts = getNbBytes h         if nbConts == 0xff             then return (pos, Just InvalidHeader)@@ -1321,8 +1323,8 @@ {-# SPECIALIZE decimalDigitsPtr :: Word -> Ptr Word8 -> Offset Word8 -> Offset Word8 -> (# Word, Bool, Offset Word8 #) #-}  -- | Convert a 'String' 'Char' by 'Char' using a case mapping function.-caseConvert :: (Char -> CM) -> String -> String-caseConvert op s@(String arr) = runST $ do+caseConvert :: (Char7 -> Char7) -> (Char -> CM) -> String -> String+caseConvert opASCII op s@(String arr) = runST $ do   mba <- MBLK.new iLen   nL <- C.onBackendPrim         (\blk  -> go mba blk (Offset 0) start)@@ -1342,11 +1344,14 @@       where         eSize !e = if e == '\0' then 0 else charToBytes (fromEnum e)         loop !dst !allocLen !nLen !dstIdx !srcIdx-          | srcIdx == end = return nLen+          | srcIdx == end    = return nLen           | nLen == allocLen = realloc+          | headerIsAscii h  = do+                UTF8.writeASCII dst dstIdx (opASCII $ Char7 $ stepAsciiRawValue h)+                loop dst allocLen (nLen + 1) (dstIdx+Offset 1) (srcIdx+Offset 1)           | otherwise = do               let !(CM c1 c2 c3) = op c-                  !(Step c nextSrcIdx) = UTF8.next src srcIdx+                  !(Step c nextSrcIdx) = UTF8.nextWith h src (srcIdx+Offset 1)               nextDstIdx <- UTF8.writeUTF8 dst dstIdx c1               if c2 == '\0' -- We keep the most common case loop as short as possible.                 then loop dst allocLen (nLen + charToBytes (fromEnum c1)) nextDstIdx nextSrcIdx@@ -1362,20 +1367,21 @@               nDst <- MBLK.new nAll               MBLK.unsafeCopyElements nDst 0 dst 0 nLen               loop nDst nAll nLen dstIdx srcIdx+            h = UTF8.nextAscii src srcIdx  -- | Convert a 'String' to the upper-case equivalent. upper :: String -> String-upper = caseConvert upperMapping+upper = caseConvert c7Upper upperMapping  -- | Convert a 'String' to the upper-case equivalent. lower :: String -> String-lower = caseConvert lowerMapping+lower = caseConvert c7Lower lowerMapping  -- | Convert a 'String' to the unicode case fold equivalent. -- -- Case folding is mostly used for caseless comparison of strings. caseFold :: String -> String-caseFold = caseConvert foldMapping+caseFold = caseConvert c7Upper foldMapping  -- | Check whether the first string is a prefix of the second string. isPrefixOf :: String -> String -> Bool
Basement/Types/Char7.hs view
@@ -24,6 +24,9 @@     , c7_7     , c7_8     , c7_9+    -- * Upper / Lower With ASCII+    , c7Upper+    , c7Lower     ) where  import GHC.Prim@@ -98,3 +101,15 @@ c7_7 = Char7 0x37 c7_8 = Char7 0x38 c7_9 = Char7 0x39++c7Lower :: Char7 -> Char7+c7Lower c@(Char7 w)+    | c <  c7_A = c+    | c <= c7_Z = Char7 (w .|. 0x20)+    | otherwise = c++c7Upper :: Char7 -> Char7+c7Upper c@(Char7 w)+    | c <  c7_a = c+    | c <= c7_z = Char7 (w .&. 0xdf)+    | otherwise = c
+ Basement/Types/CharUTF8.hs view
@@ -0,0 +1,8 @@+module Basement.Types.CharUTF8+    ( CharUTF8(..)+    , encodeCharUTF8+    , decodeCharUTF8+    ) where++import Basement.UTF8.Types+import Basement.UTF8.Helper
Basement/Types/Word128.hs view
@@ -144,7 +144,7 @@ (-) :: Word128 -> Word128 -> Word128 (-) a b     | a >= b    = applyBiWordOnNatural (Prelude.-) a b-    | otherwise = complement $ applyBiWordOnNatural (Prelude.-) b a+    | otherwise = complement (applyBiWordOnNatural (Prelude.-) b a) + 1  -- | Multiplication (*) :: Word128 -> Word128 -> Word128
Basement/Types/Word256.hs view
@@ -179,7 +179,7 @@ (-) :: Word256 -> Word256 -> Word256 (-) a b     | a >= b    = applyBiWordOnNatural (Prelude.-) a b-    | otherwise = complement $ applyBiWordOnNatural (Prelude.-) b a+    | otherwise = complement (applyBiWordOnNatural (Prelude.-) b a) + 1  -- | Multiplication (*) :: Word256 -> Word256 -> Word256
Basement/UTF8/Helper.hs view
@@ -19,6 +19,7 @@ import           Basement.Compat.Base import           Basement.Compat.Primitive import           Basement.Types.OffsetSize+import           Basement.UTF8.Types import           GHC.Prim import           GHC.Types import           GHC.Word@@ -38,7 +39,7 @@ maskHeader3# h = and# h 0xf## {-# INLINE maskHeader3# #-} --- mask a UTF8 header for 3 bytes encoding (11110xxx and 3 valid bits)+-- mask a UTF8 header for 4 bytes encoding (11110xxx and 3 valid bits) maskHeader4# :: Word# -> Word# maskHeader4# h = and# h 0x7## {-# INLINE maskHeader4# #-}@@ -55,22 +56,22 @@ toChar# w = C# (chr# (word2Int# w)) {-# INLINE toChar# #-} -toChar1 :: Word8 -> Char-toChar1 (W8# w) = toChar# w+toChar1 :: StepASCII -> Char+toChar1 (StepASCII (W8# w)) = toChar# w -toChar2 :: Word8 -> Word8 -> Char-toChar2 (W8# w1) (W8# w2)=+toChar2 :: StepASCII -> Word8 -> Char+toChar2 (StepASCII (W8# w1)) (W8# w2) =     toChar# (or# (uncheckedShiftL# (maskHeader2# w1) 6#) (maskContinuation# w2)) -toChar3 :: Word8 -> Word8 -> Word8 -> Char-toChar3 (W8# w1) (W8# w2) (W8# w3) =+toChar3 :: StepASCII -> Word8 -> Word8 -> Char+toChar3 (StepASCII (W8# w1)) (W8# w2) (W8# w3) =     toChar# (or3# (uncheckedShiftL# (maskHeader3# w1) 12#)                   (uncheckedShiftL# (maskContinuation# w2) 6#)                   (maskContinuation# w3)             ) -toChar4 :: Word8 -> Word8 -> Word8 -> Word8 -> Char-toChar4 (W8# w1) (W8# w2) (W8# w3) (W8# w4) =+toChar4 :: StepASCII -> Word8 -> Word8 -> Word8 -> Char+toChar4 (StepASCII (W8# w1)) (W8# w2) (W8# w3) (W8# w4) =     toChar# (or4# (uncheckedShiftL# (maskHeader4# w1) 18#)                   (uncheckedShiftL# (maskContinuation# w2) 12#)                   (uncheckedShiftL# (maskContinuation# w3) 6#)@@ -89,14 +90,13 @@ -- note that we expect here a valid unicode code point in the *allowed* range. -- bits will be lost if going above 0x10ffff asUTF8Char :: Char -> UTF8Char-asUTF8Char !c+asUTF8Char !(C# c)   | bool# (ltWord# x 0x80##   ) = encode1   | bool# (ltWord# x 0x800##  ) = encode2   | bool# (ltWord# x 0x10000##) = encode3   | otherwise                   = encode4     where-      !(I# xi) = fromEnum c-      !x       = int2Word# xi+      !x = int2Word# (ord# c)        encode1 = UTF8_1 (W8# x)       encode2 =@@ -135,8 +135,8 @@     | otherwise = CountOf 4 {-# INLINE skipNextHeaderValue #-} -headerIsAscii :: Word8 -> Bool-headerIsAscii x = x < 0x80+headerIsAscii :: StepASCII -> Bool+headerIsAscii (StepASCII x) = x < 0x80  charToBytes :: Int -> CountOf Word8 charToBytes c@@ -145,3 +145,88 @@     | c < 0x10000  = CountOf 3     | c < 0x110000 = CountOf 4     | otherwise    = error ("invalid code point: " `mappend` show c)++-- | Encode a Char into a CharUTF8+encodeCharUTF8 :: Char -> CharUTF8+encodeCharUTF8 !(C# c)+    | bool# (ltWord# x 0x80##   ) = CharUTF8 (W32# x)+    | bool# (ltWord# x 0x800##  ) = CharUTF8 encode2+    | bool# (ltWord# x 0x10000##) = CharUTF8 encode3+    | otherwise                   = CharUTF8 encode4+  where+    !x = int2Word# (ord# c)++    -- clearing mask, clearing all the bits that need to be clear as per the UTF8 encoding+    mask2 = 0x0000bfdf## -- 1 continuation , 5 bits header+    mask3 = 0x00bfbfef## -- 2 continuations, 4 bits header+    mask4 = 0xbfbfbff7## -- 3 continuations, 3 bits header++    -- setting mask, settings all the bits that need to be set per the UTF8 encoding+    set2  = 0x000080c0## -- 10xxxxxx     110xxxxx+    set3  = 0x008080e0## -- 10xxxxxx * 2 1110xxxx+    set4  = 0x808080f0## -- 10xxxxxx * 3 11111xxx++    encode2 = W32# (and# mask2 (or3# set2+                                     (uncheckedShiftRL# x 6#) -- 5 bits to 1st byte+                                     (uncheckedShiftL# x 8# ) -- move lowest bits to the 2nd byte+                               ))+    encode3 = W32# (and# mask3 (or4# set3+                                     (uncheckedShiftRL# x 12#) -- 4 bits to 1st byte+                                     (and# 0x3f00## (uncheckedShiftL# x 2#)) -- 6 bits to the 2nd byte+                                     (uncheckedShiftL# x 16# ) -- move lowest bits to the 3rd byte+                               ))+    encode4 = W32# (and# mask4 (or4# set4+                                     (uncheckedShiftRL# x 18#) -- 3 bits to 1st byte+                                     (or# (and# 0x3f00## (uncheckedShiftRL# x 4#))   -- 6 bits to the 2nd byte+                                          (and# 0x3f0000## (uncheckedShiftL# x 10#)) -- 6 bits to the 3nd byte+                                     )+                                     (uncheckedShiftL# x 24# ) -- move lowest bits to the 4rd byte+                               ))++-- | decode a CharUTF8 into a Char+--+-- If the value inside a CharUTF8 is not properly encoded, this will result in violation+-- of the Char invariants+decodeCharUTF8 :: CharUTF8 -> Char+decodeCharUTF8 c@(CharUTF8 !(W32# w))+    | isCharUTF8Case1 c = toChar# w+    | isCharUTF8Case2 c = encode2+    | isCharUTF8Case3 c = encode3+    | otherwise         = encode4+  where+    encode2 =+        toChar# (or# (uncheckedShiftL# (maskHeader2# w) 6#)+                     (maskContinuation# (uncheckedShiftRL# w 8#))+                )+    encode3 =+        toChar# (or3# (uncheckedShiftL# (maskHeader3# w) 12#)+                      (uncheckedShiftRL# (and# 0x3f00## w) 8#)+                      (maskContinuation# (uncheckedShiftRL# w 16#))+                )+    encode4 =+        toChar# (or4# (uncheckedShiftL#  (maskHeader4# w) 18#)+                      (uncheckedShiftRL# (and# 0x3f00## w) 10#)+                      (uncheckedShiftL#  (and# 0x3f0000## w) 4#)+                      (maskContinuation# (uncheckedShiftRL# w 24#))+                )++    -- clearing mask, removing all UTF8 metadata and keeping only signal (content)+    --maskContent2 = 0x00003f1f## -- 1 continuation , 5 bits header+    --maskContent3 = 0x003f3f0f## -- 2 continuations, 4 bits header+    --maskContent4 = 0x3f3f3f07## -- 3 continuations, 3 bits header++isCharUTF8Case1 :: CharUTF8 -> Bool+isCharUTF8Case1 (CharUTF8 !(W32# w)) = bool# (eqWord# (and# w 0x80##) 0##)+{-# INLINE isCharUTF8Case1 #-}++isCharUTF8Case2 :: CharUTF8 -> Bool+isCharUTF8Case2 (CharUTF8 !(W32# w)) = bool# (eqWord# (and# w 0x20##) 0##)+{-# INLINE isCharUTF8Case2 #-}++isCharUTF8Case3 :: CharUTF8 -> Bool+isCharUTF8Case3 (CharUTF8 !(W32# w)) = bool# (eqWord# (and# w 0x10##) 0##)+{-# INLINE isCharUTF8Case3 #-}++isCharUTF8Case4 :: CharUTF8 -> Bool+isCharUTF8Case4 (CharUTF8 !(W32# w)) = bool# (eqWord# (and# w 0x08##) 0##)+{-# INLINE isCharUTF8Case4 #-}
Basement/UTF8/Table.hs view
@@ -21,6 +21,7 @@ import           GHC.Word import           Basement.Compat.Base import           Basement.Compat.Primitive+import           Basement.UTF8.Types (StepASCII(..))  -- | Check if the byte is a continuation byte isContinuation :: Word8 -> Bool@@ -52,8 +53,8 @@ data NbBytesCont_ = NbBytesCont0_ | NbBytesCont1_ | NbBytesCont2_ | NbBytesCont3_  -- | Get the number of following bytes given the first byte of a UTF8 sequence.-getNbBytes :: Word8 -> Int-getNbBytes (W8# w) = I# (getNbBytes# w)+getNbBytes :: StepASCII -> Int+getNbBytes (StepASCII (W8# w)) = I# (getNbBytes# w) {-# INLINE getNbBytes #-}  -- | Check if the byte is a continuation byte
Basement/UTF8/Types.hs view
@@ -9,6 +9,8 @@     , isValidStepDigit     -- * Unicode Errors     , ValidationFailure(..)+    -- * UTF8 Encoded 'Char'+    , CharUTF8(..)     -- * Case Conversion     , CM (..)     ) where@@ -34,10 +36,21 @@ newtype StepDigit = StepDigit Word8  -- | Step when processing ASCII character-newtype StepASCII = StepASCII Word8+newtype StepASCII = StepASCII { stepAsciiRawValue :: Word8 }  -- | Specialized tuple used for case mapping. data CM = CM {-# UNPACK #-} !Char {-# UNPACK #-} !Char {-# UNPACK #-} !Char deriving (Eq)++-- | Represent an already encoded UTF8 Char where the the lowest 8 bits is the start of the+-- sequence. If this contains a multi bytes sequence then each higher 8 bits are filled with+-- the remaining sequence 8 bits per 8 bits.+--+-- For example:+-- 'A' => U+0041  => 41          => 0x00000041+-- '€  => U+20AC  => E2 82 AC    => 0x00AC82E2+-- '𐍈' => U+10348 => F0 90 8D 88 => 0x888D90F0+--+newtype CharUTF8 = CharUTF8 Word32  isValidStepASCII :: StepASCII -> Bool isValidStepASCII (StepASCII w) = w < 0x80
basement.cabal view
@@ -1,25 +1,23 @@ name:                basement-version:             0.0.7+version:             0.0.8 synopsis:            Foundation scrap box of array & string description:         Foundation most basic primitives without any dependencies-homepage:            https://github.com/haskell-foundation/foundation#readme license:             BSD3 license-file:        LICENSE copyright:           2015-2017 Vincent Hanquez <vincent@snarc.org>-                     2017-2018 Foundation Maintainers+                   , 2017-2018 Foundation Maintainers maintainer:          vincent@snarc.org-copyright:           Vincent Hanquez category:            Web build-type:          Simple-homepage:            https://github.com/haskell-foundation/foundation+homepage:            https://github.com/haskell-foundation/foundation#readme bug-reports:         https://github.com/haskell-foundation/foundation/issues cabal-version:       >=1.10-tested-with:         GHC==8.2.1, GHC==8.0.2, GHC==7.10.3 extra-source-files:  cbits/*.h  source-repository head   type: git-  location: https://github.com/haskell-foundation/foundation.git+  location: https://github.com/haskell-foundation/foundation+  subdir: basement  library   hs-source-dirs:    .@@ -37,6 +35,7 @@                      Basement.From                       Basement.Types.Char7+                     Basement.Types.CharUTF8                      Basement.Types.OffsetSize                      Basement.Types.Ptr                      Basement.Types.AsciiString@@ -59,6 +58,13 @@                      Basement.String.Builder                      Basement.NonEmpty +                     -- Extended Types with explicit type level size+                     Basement.Sized.Block+                     Basement.Sized.UVect+                     Basement.Sized.Vect+                     Basement.Sized.List+                     Basement.BlockN+                      -- Utils                      Basement.NormalForm                      Basement.These@@ -95,16 +101,9 @@                      Basement.Compat.Natural                      Basement.Compat.NumLiteral                      Basement.Compat.Typeable-  if impl(ghc >= 8.0)-    exposed-modules: Basement.BlockN-                   , Basement.Sized.Block-                   , Basement.Sized.UVect-                   , Basement.Sized.Vect-                   , Basement.Bits-  if impl(ghc >= 7.10)-    exposed-modules:-                     Basement.Sized.List +                     Basement.Bits+   other-modules:                      Basement.Error                      Basement.Show@@ -137,12 +136,14 @@                       Basement.Terminal.Size --  build-depends:       base >= 4.7 && < 5+  -- support and dependencies+  if impl(ghc < 8.0)+    buildable: False+  else+    build-depends:     base                      , ghc-prim--  if os(windows)-    build-depends:     Win32+    if os(windows)+      build-depends:   Win32    default-language:    Haskell2010   default-extensions: NoImplicitPrelude