Change Log
v0.5.0 (2025-04-07)
Full Changelog
Headline changes
- Data.List.Linear.{take,drop} take one list element too many #484
- Remove pull array index (unsafe), add uncons. #475 (sjoerdvisscher)
- Adds missing Data.Num.Linear.* instances for Word, Integer, Natural, Float, Word8/16/32/64 Int8/16/32/64 #467 (Qqwy)
- In scope-passing style: use a
Movable b instead of Ur b (it's fully backward compatible compatible)#473 (aspiwack)
Miscellaneous
- Clarify Ur documentation #476
- Test with GHC 9.10 and GHC 9.12
- Improve wording about Ur #478 (aspiwack)
v0.4.0 (2023-10-13)
Full Changelog
Headline changes
- Deprecate cycle, repeat, and iterate for lists #458 (treeowl)
- Compability with GHC 9.8 #457 (monoidal)
- Drop compatibility with GHC 9.0 #442 (aspiwack)
- Implements
Semigroup / Monoid instances for Ur #461 (konn)
- Adds
Functor instances for the linear arrow #460 (konn)
- This fixes an issue with linear lenses (both
Data and Control) #459
Miscellaneous
- Implement toSystemIO safely #444 (treeowl)
- Stop testing with GHC 9.2, though it this version is still expected to work #448 (tbagrel1)
- Benchmarks:
v0.3.1 (2023-03-17)
Full Changelog
Headline changes
v0.3.0 (2022-10-26)
Full Changelog
Headline changes
- Support GHC 9.4 in addition to GHC 9.2 and GHC 9.0 (GHC 9.0 is no longer tested though) #427 (matthew-healy)
- Improvement of the resource-aware
IO (RIO) monad's interface
- Add some
Handle operations to RIO #425 (endgame)
- The
Handle type is now transparent, to make extensions of the API possible #428 (aspiwack)
Miscellaneous
Internal
v0.2.0 - 2022-03-25
Full Changelog
Breaking changes
- Remove
Prelude.Linear.asTypeOf #397 (tbagrel1)
- Add (and use) linear generics for many classes #394 (treeowl)
Control.Functor.Linear.Functor, Data.Functor.Linear.{Functor,Applicative} can now be derived through Generically1
Data.Functor.Linear.Traversable cannot be derived directly, but one can get genericTraverse for a Generic1 type and then set traverse = genericTraverse
Data.Unrestricted.Linear.{Consumable,Dupable,Movable} can be derived through Generically
- Rework
Data.Monoid.Linear module (affects linear Semigroup and Monoid) #314 (sjoerdvisscher), #381 (tbagrel1)
- Remove superclass constraint on
Prelude.{Semigroup,Monoid} for Data.Monoid.Linear.{Semigroup,Monoid}. Data.Monoid.Linear.Monoid instances now have to define mempty
- Add many missing instances of
Data.Monoid.Linear.{Semigroup,Monoid}
- Deprecate
Data.Monoid.Linear.{Adding,Multiplying,getAdded,getMultiplied} in favor of Data.Semigroup.{Sum,Product} (reexported under Data.Monoid.Linear) which now have linear Semigroup and Monoid instance. Sum and Product inner values can be extracted linearly with pattern-matching
Data.Semigroup is no longer reexported as a whole under Data.Monoid.Linear. Instead, only newtypes with a linear Semigroup instance are reexported
- Add missing fixity declarations for every operator of
linear-base #386, (tbagrel1)
- Unchanged (already present):
infixr 0 $, infixl 1 &, infixr 2 ||, infixr 3 &&,
infix 4 ==, /=, <=, <, >, >=, infixr 5 :>
- Add:
infixr 0 `lseq`, `seq`, $!
- Add:
infixl 1 <&>, >>=, >>, &
- Add:
infixr 3 ***
- Add:
infix 4 `compare`, `elem`
- Add:
infixl 4 <$>, <$, <*>, <*
- Add:
infixr 5 ++
- Add:
infixr 6 <>
- Add:
infixl 6 +, -
- Add:
infixl 7 *
- Add:
infixr 9 #., .>, .
- Previously missing fixity declarations defaulted to
infixl 9, so some code might subtly break when updating to v0.2.0
- Improve consistency of module naming #383 (tbagrel1)
System.IO.Resource -> System.IO.Resource.Linear
- Rework
Data.V.Linear API #360 (tbagrel1)
Data.Functor.Linear.Applicative instance
empty :: forall a. V 0 a
consume :: V 0 a %1 -> ()
cons :: forall n a. a %1 -> V (n - 1) a %1 -> V n a
uncons# :: 1 <= n => V n a %1 -> (# a, V (n - 1) a #)
uncons :: 1 <= n => V n a %1 -> (a, V (n - 1) a)
elim :: forall (n :: Nat) a b f. IsFunN a b f => f %1 -> V n a %1 -> b
make :: forall (n :: Nat) a f. IsFunN a (V n a) f => f
fromReplicator :: forall n a. KnownNat n => Replicator a %1 -> V n a
theLength :: forall n. KnownNat n => Prelude.Int
dupV is now part of Data.V.Linear:
dupV :: forall n a. (KnownNat n, Dupable a) => a %1 -> V n a
- Replace
dupV in the minimal definition of Data.Unrestricted.Linear.Dupable with dupR :: a %1 -> Replicator a #360 (tbagrel1) #365 (facundominguez)
- Introduce a new data type
Data.Replicator.Linear.Replicator, which represents an infinite linear stream producing values of type a, with a stream-like API and a Data.Functor.Linear.Applicative instance
Data.Unrestricted.Linear.Dupable no longer depends on Data.V.Linear
- Add
dup3, dup4, dup5, dup6, dup7
- Polymorphise the type of some
Prelude.Linear functions in levity and multiplicity #353 (treeowl)
($) :: forall {rep} a (b :: TYPE rep) p q. (a %p-> b) %q-> a %p-> b
(&) :: forall {rep} a (b :: TYPE rep) p q. a %p-> (a %p-> b) %q-> b
($!) :: forall {rep} a (b :: TYPE rep) p q. (a %p-> b) %q-> a %p-> b
(.) :: forall {rep} b (c :: TYPE rep) a q m n. (b %1-> c) %q-> (a %1-> b) %m-> a %n-> c
forget :: forall {rep} a (b :: TYPE rep). (a %1-> b) %1-> a -> b
- Multiplicity-polymorphise the type of some
Prelude.Linear functions #319 (aspiwack)
id :: a %q-> a
const :: a %q-> b -> a
asTypeOf :: a %q-> a -> a
seq :: a -> b %q-> b
curry :: ((a, b) %p-> c) %q-> a %p-> b %p-> c
uncurry :: (a %p-> b %p-> c) %q-> (a, b) %p-> c
runIdentity' :: Identity a %p-> a
- Remove
LinearArrow usage in Control.Optics.Linear and use FUN 'One instead #308 (sjoerdvisscher)
- This change add a
Data.Profunctor.Linear.Profunctor instance to FUN 'One
- Add
.Linear.Internal modules (and only export parts of them in publicly-exposed .Linear modules) #306 (ekmett)
Data.Array.Destination[.Internal]
Data.Array.Mutable.Linear[.Internal]
Data.HashMap.Mutable.Linear[.Internal]
Data.Set.Mutable.Linear[.Internal]
Data.Vector.Mutable.Linear[.Internal]
Foreign.Marshal.Pure[.Internal]
System.IO.Resource.Linear.[.Internal]
- This principle has been applied for newly-created modules in the subsequent PRs
New additions
- Add
Data.Arity.Linear module containing type-level helpers to deal with n-ary linear functions and type-level structural integers #390 (aspiwack), #391 (tbagrel1)
- Add
void function to consume Control.Functor.Linear.Functor inner value #387 (tbagrel1)
- Add inspection tests to check inlining of
Data.Replicator.Linear.elim and Data.V.Linear.{make,elim} #367 (tbagrel1)
- Add
genericTraverse to Data.Functor.Linear for Generics.Linear.Generic1 types #366 (tbagrel1), #384 (aspiwack), #385 (treeowl)
- Add
Unsafe.toLinearN (and narrow the scope of some coercions in the module internals) #346 (treeowl)
- Add newtype
Data.Unrestricted.Linear.AsMovable to derive Consumable and Dupable from Movable #357 (tbagrel1)
- Add
Data.Unrestricted.Linear.{Consumable,Dupable,Moveable} instances for all Word and Int types #352 (googleson78)
- Add benchmarks for
Data.HashMap.Linear #338 (utdemir)
- Add benchmarks for
Data.Array.Mutable.Linear #331 (utdemir)
- Add
Data.Unrestricted.Linear.{Consumable,Dupable} instances to Data.V.Linear.V #324 (aspiwack)
- Add
Data.Unrestricted.Linear.UrT, the unrestricted monad transformer #304 (sjoerdvisscher)
Code improvements
- Add robustness improvements to
Data.Replicator.Linear.elim and Data.V.Linear.{make,elim} #364 (tbagrel1), #382 (tbagrel1), #390 (aspiwack), #391 (tbagrel1)
- Add various optimisations for
Data.HashMap.Linear #337 (utdemir)
- Improve
Data.Array.Mutable.Unlifted.Linear.map performance #334 (utdemir)
- Remove one
unsafeCoerce use from Unsafe.coerce #330 (utdemir)
- Improve
Prelude.Linear.seq performance #329 (utdemir)
- Use safer
Vector.fromArray in Data.Array.Mutable.Linear internals #327 (utdemir)
- Remove some incomplete pattern matches in
Data.List.Linear.{scanr,scanr1} #299 (utdemir)
Documentation improvements
- Change relative links for absolute ones in the README #401 (tbagrel1)
- Add comparison table between
Prelude and Prelude.Linear classes #368 (tbagrel1)
- Add Hackage and Stackage badges #336 (utdemir)
- Hide internal modules from
haddock documentation #326 (utdemir), #363 (tbagrel1)
- Add a note that GHC 9.2 fixes linear
case in the user guide #320 (monoidal)
- Replace
#-> with %1 -> in the documentation #315 (sjoerdvisscher)
- Fix rendering in
Data.Unrestricted.Linear.Ur documentation #303 (sjoerdvisscher)
- Fix a typo in
Data.Array.Mutable.Linear.unsafeWrite documentation #301 (daig)
- Add a list of introduction talks about linear types in the README #300 (aspiwack)
- Improve developer documentation in
Data.Array.Polarized.Push #294 (Divesh-Otwani)
v0.1.0 - 2021-02-09