Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
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
- linearIdentity :: a %1 -> a
- linearSwap :: (a, a) %1 -> (a, a)
- nonLinearSubsume :: (a, a) -> (a, a)
- linearPairIdentity :: (a, a) %1 -> (a, a)
- linearIdentity2 :: a %1 -> a
- nonLinearPair :: a -> (a, a)
- nonLinearPair2 :: a -> (a, a)
- nonLinearTriple :: a -> (a, (a, a))
- regularIdentity :: a -> a
- (#.) :: (b %1 -> c) -> (a %1 -> b) -> a %1 -> c
- linearCompose :: (a, a) %1 -> (a, a)
- data LinearHolder a where
- LinearHolder :: a -> LinearHolder a
- linearHold :: a %1 -> LinearHolder a
- linearHoldExtract :: LinearHolder a %1 -> a
- linearIdentity3 :: a %1 -> a
- data LinearHolder2 where
- LinearHolder2 :: a -> b -> LinearHolder2
- linearHold' :: a %1 -> LinearHolder2
- data ForcedUnlinear a where
- ForcedUnlinear :: a -> ForcedUnlinear a
- forcedLinearPair :: ForcedUnlinear a %1 -> (a, a)
- demote :: (ForcedUnlinear a %1 -> b) -> a -> b
- promote :: (a -> b) -> ForcedUnlinear a %1 -> b
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 #
regularIdentity :: a -> a Source #
linearCompose :: (a, a) %1 -> (a, a) Source #
Linear functions with user data types
data LinearHolder a where Source #
Constructors
LinearHolder :: a -> LinearHolder a |
linearHold :: a %1 -> LinearHolder a Source #
linearHoldExtract :: LinearHolder a %1 -> a Source #
linearIdentity3 :: a %1 -> a Source #
data LinearHolder2 where Source #
Constructors
LinearHolder2 :: a -> b -> LinearHolder2 |
linearHold' :: a %1 -> LinearHolder2 Source #
data ForcedUnlinear a where Source #
Constructors
ForcedUnlinear :: a -> ForcedUnlinear a |
forcedLinearPair :: ForcedUnlinear a %1 -> (a, a) Source #
demote :: (ForcedUnlinear a %1 -> b) -> a -> b Source #
promote :: (a -> b) -> ForcedUnlinear a %1 -> b Source #