Awesome
Linear base
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.
Motivation
Why do you need linear-base
to write linear projects?
-
Data types, functions and classes in
base
are not linear types aware. For instance, ifn
is a linearly-boundInt
, the RHS of a definition cannot writen + 1
— this will not type check. We need linear variants ofNum
,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.
Getting started
-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
User Guide
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.
Learning about -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.
Tutorials and examples
- See the
examples/
folder. - Linear examples on watertight 3D models
Reading material
- There is a wiki page.
- Key Blog posts
- Predictable performance (the first blog post from Tweag on this)
- IO State Transitions
- Streaming
- See here for all of Tweag's blog posts on linear types.
- Here is the paper behind
-XLinearTypes
.
Talks
–
- Distributed Programming with Linear Types – Haskell Exchange 2017
- Practical Linearity in a higher-order polymorphic language – POPL 2018
- Practical Linearity in a higher-order polymorphic language – Curry on 2018
- Practical Linearity in a higher-order polymorphic language – Haskell Exchange 2018
- Implementing Linear Haskell
- In-place array update with linear types – ZuriHac 2020
- Typecheck Your Memory Management with Linear Types – Haskell Exchange 2017
Contributing
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
Licence
See the Licence file.
Copyright © Tweag Holding and its affiliates.