Vectorise.Monad.Base

ghc-7.0.4: The GHC API

Vectorise.Monad.Base

Contents

- The Vectorisation Monad
- Lifting
- Error Handling
- Control

Description

The Vectorisation monad.

Synopsis

- data VResult a
  - = Yes GlobalEnv LocalEnv a
  - | No
- newtype VM a = VM {
  - runVM :: Builtins -> GlobalEnv -> LocalEnv -> DsM (VResult a)
  }
- liftDs :: DsM a -> VM a
- cantVectorise :: String -> SDoc -> a
- maybeCantVectorise :: String -> SDoc -> Maybe a -> a
- maybeCantVectoriseM :: Monad m => String -> SDoc -> m (Maybe a) -> m a
- noV :: VM a
- traceNoV :: String -> SDoc -> VM a
- ensureV :: Bool -> VM ()
- traceEnsureV :: String -> SDoc -> Bool -> VM ()
- onlyIfV :: Bool -> VM a -> VM a
- tryV :: VM a -> VM (Maybe a)
- maybeV :: VM (Maybe a) -> VM a
- traceMaybeV :: String -> SDoc -> VM (Maybe a) -> VM a
- orElseV :: VM a -> VM a -> VM a
- fixV :: (a -> VM a) -> VM a

# The Vectorisation Monad

data VResult a

Vectorisation can either succeed with new envionment and a value, or return with failure.

Constructors

Yes GlobalEnv LocalEnv a |
No |

newtype VM a

Constructors

VM |
Fields runVM :: Builtins -> GlobalEnv -> LocalEnv -> DsM (VResult a)

Instances

Monad VM |

# Lifting

liftDs :: DsM a -> VM a

Lift a desugaring computation into the vectorisation monad.

# Error Handling

cantVectorise :: String -> SDoc -> a

Throw a `pgmError` saying we can't vectorise something.

maybeCantVectorise :: String -> SDoc -> Maybe a -> a

Like `fromJust`, but `pgmError` on Nothing.

maybeCantVectoriseM :: Monad m => String -> SDoc -> m (Maybe a) -> m a

Like `maybeCantVectorise` but in a `Monad`.

# Control

noV :: VM a

Return some result saying we've failed.

traceNoV :: String -> SDoc -> VM a

Like `traceNoV` but also emit some trace message to stderr.

ensureV :: Bool -> VM ()

If `True` then carry on, otherwise fail.

traceEnsureV :: String -> SDoc -> Bool -> VM ()

Like `ensureV` but if we fail then emit some trace message to stderr.

onlyIfV :: Bool -> VM a -> VM a

If `True` then return the first argument, otherwise fail.

tryV :: VM a -> VM (Maybe a)

Try some vectorisation computaton. If it succeeds then return `Just` the result, otherwise return `Nothing`.

maybeV :: VM (Maybe a) -> VM a

If `Just` then return the value, otherwise fail.

traceMaybeV :: String -> SDoc -> VM (Maybe a) -> VM a

Like `maybeV` but emit a message to stderr if we fail.

orElseV :: VM a -> VM a -> VM a

Try the first computation, if it succeeds then take the returned value, if it fails then run the second computation instead.

fixV :: (a -> VM a) -> VM a

Fixpoint in the vectorisation monad.