to 1.1.0 → 1.2.0
raw patch · 3 files changed
+134/−6 lines, 3 filesdep +vectorPVP ok
version bump matches the API change (PVP)
Dependencies added: vector
API changes (from Hackage documentation)
- To: instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k) => To.ToHashSet [k] k
+ To: class ToStorableVector a e
+ To: class ToUnboxedVector a e
+ To: class ToVector a e
+ To: instance (Data.Vector.Unboxed.Base.Unbox a, Foreign.Storable.Storable a) => To.ToStorableVector (Data.Vector.Unboxed.Base.Vector a) a
+ To: instance (Data.Vector.Unboxed.Base.Unbox a, Foreign.Storable.Storable a) => To.ToUnboxedVector (Data.Vector.Storable.Vector a) a
+ To: instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k) => To.ToHashSet (GHC.Base.NonEmpty k) k
+ To: instance (k Data.Type.Equality.~ GHC.Types.Int) => To.ToIntSet (GHC.Base.NonEmpty k)
+ To: instance (kv Data.Type.Equality.~ (GHC.Types.Int, v)) => To.ToIntMap (GHC.Base.NonEmpty kv) v
+ To: instance (kv Data.Type.Equality.~ (k, v), GHC.Classes.Eq k, Data.Hashable.Class.Hashable k) => To.ToHashMap (GHC.Base.NonEmpty kv) k v
+ To: instance (kv Data.Type.Equality.~ (k, v), GHC.Classes.Ord k) => To.ToMap (GHC.Base.NonEmpty kv) k v
+ To: instance Data.Vector.Unboxed.Base.Unbox a => To.ToUnboxedVector (Data.Vector.Vector a) a
+ To: instance Data.Vector.Unboxed.Base.Unbox a => To.ToUnboxedVector (GHC.Base.NonEmpty a) a
+ To: instance Data.Vector.Unboxed.Base.Unbox a => To.ToUnboxedVector [a] a
+ To: instance Data.Vector.Unboxed.Base.Unbox a => To.ToVector (Data.Vector.Unboxed.Base.Vector a) a
+ To: instance Foreign.Storable.Storable a => To.ToStorableVector (Data.Vector.Vector a) a
+ To: instance Foreign.Storable.Storable a => To.ToStorableVector (GHC.Base.NonEmpty a) a
+ To: instance Foreign.Storable.Storable a => To.ToStorableVector [a] a
+ To: instance Foreign.Storable.Storable a => To.ToVector (Data.Vector.Storable.Vector a) a
+ To: instance GHC.Classes.Ord k => To.ToSet (GHC.Base.NonEmpty k) k
+ To: instance To.ToVector (GHC.Base.NonEmpty a) a
+ To: instance To.ToVector [a] a
+ To: toStorableVector :: ToStorableVector a e => a -> Vector e
+ To: toUnboxedVector :: ToUnboxedVector a e => a -> Vector e
+ To: toVector :: ToVector a e => a -> Vector e
Files
- CHANGELOG.md +5/−0
- src/To.hs +125/−3
- to.cabal +4/−3
CHANGELOG.md view
@@ -1,3 +1,8 @@+# 1.2.0++* Added `toVector`, `toUnboxedVector`, `toStorableVector`.+* Added `NonEmpty` instances.+ # 1.1.0 * Added `toMap`, `toSet`, `toIntMap`, `toIntSet`, `toHashMap`, `toHashSet`.
src/To.hs view
@@ -12,6 +12,14 @@ -- into. module To (+ -- * Sequences+ -- ** 'V.Vector'+ ToVector(..),+ -- ** Unboxed 'VU.Vector'+ ToUnboxedVector(..),+ -- ** Storable 'VS.Vector'+ ToStorableVector(..),+ -- * Maps -- ** 'ML.Map' ToMap(..),@@ -52,6 +60,11 @@ import GHC.TypeLits (TypeError, ErrorMessage(..)) import Data.Hashable+import qualified Data.List.NonEmpty as NE+import qualified Data.Vector as V+import qualified Data.Vector.Unboxed as VU+import qualified Data.Vector.Storable as VS+import qualified Data.Vector.Generic as VG import qualified Data.Map.Lazy as ML import qualified Data.IntMap.Lazy as IML import qualified Data.Set as S@@ -70,6 +83,90 @@ import qualified Data.ByteString.UTF8 as UTF8 ----------------------------------------------------------------------------+-- ToVector+----------------------------------------------------------------------------++class ToVector a e where+ -- | Turn into a 'V.Vector'.+ toVector :: a -> V.Vector e++-- | @[a] -> Vector a@+instance ToVector [a] a where+ toVector = V.fromList+ {-# INLINE toVector #-}++-- | @NonEmpty a -> Vector a@+instance ToVector (NE.NonEmpty a) a where+ toVector = V.fromList . NE.toList+ {-# INLINE toVector #-}++-- | @unboxed Vector a -> Vector a@+instance VU.Unbox a => ToVector (VU.Vector a) a where+ toVector = VG.convert+ {-# INLINE toVector #-}++-- | @storable Vector a -> Vector a@+instance VS.Storable a => ToVector (VS.Vector a) a where+ toVector = VG.convert+ {-# INLINE toVector #-}++----------------------------------------------------------------------------+-- ToUnboxedVector+----------------------------------------------------------------------------++class ToUnboxedVector a e where+ -- | Turn into an unboxed 'VU.Vector'.+ toUnboxedVector :: a -> VU.Vector e++-- | @[a] -> unboxed Vector a@+instance VU.Unbox a => ToUnboxedVector [a] a where+ toUnboxedVector = VU.fromList+ {-# INLINE toUnboxedVector #-}++-- | @NonEmpty a -> unboxed Vector a@+instance VU.Unbox a => ToUnboxedVector (NE.NonEmpty a) a where+ toUnboxedVector = VU.fromList . NE.toList+ {-# INLINE toUnboxedVector #-}++-- | @Vector a -> unboxed Vector a@+instance VU.Unbox a => ToUnboxedVector (V.Vector a) a where+ toUnboxedVector = VG.convert+ {-# INLINE toUnboxedVector #-}++-- | @storable Vector a -> unboxed Vector a@+instance (VU.Unbox a, VS.Storable a) => ToUnboxedVector (VS.Vector a) a where+ toUnboxedVector = VG.convert+ {-# INLINE toUnboxedVector #-}++----------------------------------------------------------------------------+-- ToStorableVector+----------------------------------------------------------------------------++class ToStorableVector a e where+ -- | Turn into a storable 'VS.Vector'.+ toStorableVector :: a -> VS.Vector e++-- | @[a] -> storable Vector a@+instance VS.Storable a => ToStorableVector [a] a where+ toStorableVector = VS.fromList+ {-# INLINE toStorableVector #-}++-- | @NonEmpty a -> storable Vector a@+instance VS.Storable a => ToStorableVector (NE.NonEmpty a) a where+ toStorableVector = VS.fromList . NE.toList+ {-# INLINE toStorableVector #-}++-- | @Vector a -> storable Vector a@+instance VS.Storable a => ToStorableVector (V.Vector a) a where+ toStorableVector = VG.convert+ {-# INLINE toStorableVector #-}++-- | @unboxed Vector a -> storable Vector a@+instance (VU.Unbox a, VS.Storable a) => ToStorableVector (VU.Vector a) a where+ toStorableVector = VG.convert+ {-# INLINE toStorableVector #-}++---------------------------------------------------------------------------- -- ToMap ---------------------------------------------------------------------------- @@ -82,6 +179,11 @@ toMap = ML.fromList {-# INLINE toMap #-} +-- | @NonEmpty (k, v) -> Map k v@+instance (kv ~ (k, v), Ord k) => ToMap (NE.NonEmpty kv) k v where+ toMap = ML.fromList . NE.toList+ {-# INLINE toMap #-}+ -- | @HashMap k v -> Map k v@ instance Ord k => ToMap (HML.HashMap k v) k v where toMap = HML.foldlWithKey' (\m k v -> ML.insert k v m) mempty@@ -105,6 +207,11 @@ toSet = S.fromList {-# INLINE toSet #-} +-- | @NonEmpty k -> Set k@+instance Ord k => ToSet (NE.NonEmpty k) k where+ toSet = S.fromList . NE.toList+ {-# INLINE toSet #-}+ -- | @HashSet k -> Set k@ instance Ord k => ToSet (HS.HashSet k) k where toSet = HS.foldl' (flip S.insert) mempty@@ -128,6 +235,11 @@ toIntMap = IML.fromList {-# INLINE toIntMap #-} +-- | @NonEmpty (Int, v) -> IntMap v@+instance (kv ~ (Int, v)) => ToIntMap (NE.NonEmpty kv) v where+ toIntMap = IML.fromList . NE.toList+ {-# INLINE toIntMap #-}+ -- | @Map Int v -> IntMap v@ instance ToIntMap (ML.Map Int v) v where toIntMap = IML.fromDistinctAscList . ML.toAscList@@ -151,6 +263,11 @@ toIntSet = IS.fromList {-# INLINE toIntSet #-} +-- | @NonEmpty Int -> IntSet@+instance (k ~ Int) => ToIntSet (NE.NonEmpty k) where+ toIntSet = IS.fromList . NE.toList+ {-# INLINE toIntSet #-}+ -- | @Set Int -> IntSet@ instance ToIntSet (S.Set Int) where toIntSet = IS.fromDistinctAscList . S.toAscList@@ -174,6 +291,11 @@ toHashMap = HML.fromList {-# INLINE toHashMap #-} +-- | @NonEmpty (k, v) -> HashMap k v@+instance (kv ~ (k, v), Eq k, Hashable k) => ToHashMap (NE.NonEmpty kv) k v where+ toHashMap = HML.fromList . NE.toList+ {-# INLINE toHashMap #-}+ -- | @Map k v -> HashMap k v@ instance (Eq k, Hashable k) => ToHashMap (ML.Map k v) k v where toHashMap = ML.foldlWithKey' (\m k v -> HML.insert k v m) mempty@@ -192,9 +314,9 @@ -- | Turn into a 'HS.HashSet'. toHashSet :: a -> HS.HashSet k --- | @[k] -> HashSet k@-instance (Eq k, Hashable k) => ToHashSet [k] k where- toHashSet = HS.fromList+-- | @NonEmpty k -> HashSet k@+instance (Eq k, Hashable k) => ToHashSet (NE.NonEmpty k) k where+ toHashSet = HS.fromList . NE.toList {-# INLINE toHashSet #-} -- | @Set k -> HashSet k@
to.cabal view
@@ -1,5 +1,5 @@ name: to-version: 1.1.0+version: 1.2.0 synopsis: Simple, safe, boring type conversions description: `to` contains type conversions for popular Haskell types. All provided@@ -26,10 +26,11 @@ build-depends: base >=4.9 && <5, bytestring, containers,- unordered-containers, hashable, text,- utf8-string+ unordered-containers,+ utf8-string,+ vector hs-source-dirs: src default-language: Haskell2010 ghc-options: -Wall