linear-base-0.5.0: Standard library for linear types.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Simple.Pure

Description

We have simple linear functions and simple linear data structures that illustrate the basic concepts of how the type checker of GHC with linear types behaves. The goal of this is to be a ridiculously simple tutorial on the basics of linear types.

Synopsis

Simple linear functions

linearIdentity :: a %1 -> a Source #

linearSwap :: (a, a) %1 -> (a, a) Source #

nonLinearSubsume :: (a, a) -> (a, a) Source #

linearPairIdentity :: (a, a) %1 -> (a, a) Source #

linearIdentity2 :: a %1 -> a Source #

nonLinearPair :: a -> (a, a) Source #

nonLinearPair2 :: a -> (a, a) Source #

nonLinearTriple :: a -> (a, (a, a)) Source #

(#.) :: (b %1 -> c) -> (a %1 -> b) -> a %1 -> c infixr 9 Source #

linearCompose :: (a, a) %1 -> (a, a) Source #

Linear functions with user data types

data LinearHolder a where Source #

Constructors

LinearHolder :: a -> LinearHolder a 

linearIdentity3 :: a %1 -> a Source #

data LinearHolder2 where Source #

Constructors

LinearHolder2 :: a -> b -> LinearHolder2 

data ForcedUnlinear a where Source #

Constructors

ForcedUnlinear :: a -> ForcedUnlinear a 

demote :: (ForcedUnlinear a %1 -> b) -> a -> b Source #

promote :: (a -> b) -> ForcedUnlinear a %1 -> b Source #