@hackage linear-base0.1.0
Standard library for linear types.
Installation
Dependencies (9)
- base >=4.15 && <4.19
- containers
- ghc-prim
- hashable
- primitive
- storable-tuple Show all…
Dependents (8)
@hackage/reference-counting, @hackage/packed-data, @hackage/linear-free, @hackage/inline-java, @hackage/one-liner, @hackage/jni, Show all…
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
baseare not linear types aware. For instance, ifnis a linearly-boundInt, the RHS of a definition cannot writen + 1— this will not type check. We need linear variants ofNum,Functors,Monads,($), 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.
All source files with linear types need a language extension pragma at the top:
{-# LANGUAGE LinearTypes #-}
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.
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
- 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
Contributing
Linear base is maintained by Tweag.
To contribute please see the Design Document for instructions and advice on making pull requests.
Licence
See the Licence file.
Copyright © Tweag Holding and its affiliates.