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 +7/−7
- Basement/Alg/UTF8.hs +33/−9
- Basement/Nat.hs +3/−0
- Basement/Sized/Block.hs +8/−4
- Basement/String.hs +14/−8
- Basement/Types/Char7.hs +15/−0
- Basement/Types/CharUTF8.hs +8/−0
- Basement/Types/Word128.hs +1/−1
- Basement/Types/Word256.hs +1/−1
- Basement/UTF8/Helper.hs +99/−14
- Basement/UTF8/Table.hs +3/−2
- Basement/UTF8/Types.hs +14/−1
- basement.cabal +22/−21
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