Linear base is a standard library for developing applications with linear
types. It is named linear-base
to be an analog to the original base
package that ships with GHC.
The purpose of linear-base
is to provide the minimal facilities you need to
write practical Linear Haskell code, i.e., Haskell code that uses the
-XLinearTypes
language extension.
Why do you need linear-base
to write linear projects?
Data types, functions and classes in base
are not linear types
aware. For instance, if n
is a linearly-bound Int
, the RHS of
a definition cannot write n + 1
— this will not type check. We
need linear variants of Num
, Functor
s, Monad
s, ($)
, etc.
This library exports new abstractions that leverage linear types for resource safety or performance. For example, there are new APIs for file and socket I/O as well as for safe in-place mutation of arrays.
-XLinearTypes
is released with GHC 9, and linear-base
is released
on Hackage and Stackage.
All source files with linear types need a language extension pragma at the top:
{-# LANGUAGE LinearTypes #-}
To get in touch, you can join our server
If you already know what -XLinearTypes
does and what the linear
arrow a %1-> b
means, then read the User Guide and explore the
examples/
folder to know how to use linear-base
.
You can also find a table comparing base
and linear-base
typeclasses
here.
-XLinearTypes
If you're a Haskeller who hasn't written any Linear Haskell code, don't fear! There are plenty of excellent resources and examples to help you.
examples/
folder.-XLinearTypes
.–
Linear base is maintained by Tweag.
To contribute please see the Design Document for instructions and advice on making pull requests.
A great first step is to join our server
See the Licence file.
Copyright © Tweag Holding and its affiliates.