fay-0.24.0.1: A compiler for Fay, a Haskell subset that compiles to JavaScript.

Safe HaskellNone
LanguageHaskell98

Fay.Types

Description

All Fay types and instances.

Synopsis

Documentation

data JsLit #

Literal value type.

Instances
Eq JsLit # 
Instance details

Defined in Fay.Types.Js

Methods

(==) :: JsLit -> JsLit -> Bool #

(/=) :: JsLit -> JsLit -> Bool #

Show JsLit # 
Instance details

Defined in Fay.Types.Js

Methods

showsPrec :: Int -> JsLit -> ShowS #

show :: JsLit -> String #

showList :: [JsLit] -> ShowS #

IsString JsLit #

Just handy to have.

Instance details

Defined in Fay.Types.Js

Methods

fromString :: String -> JsLit #

Printable JsLit #

Print literals.

Instance details

Defined in Fay.Compiler.Print

Methods

printJS :: JsLit -> Printer #

data JsName #

A name of some kind.

Instances
Eq JsName # 
Instance details

Defined in Fay.Types.Js

Methods

(==) :: JsName -> JsName -> Bool #

(/=) :: JsName -> JsName -> Bool #

Show JsName # 
Instance details

Defined in Fay.Types.Js

Printable JsName #

Print one of the kinds of names.

Instance details

Defined in Fay.Compiler.Print

Methods

printJS :: JsName -> Printer #

newtype Compile a #

Compile monad.

Constructors

Compile 

Fields

Instances
Monad Compile # 
Instance details

Defined in Fay.Types

Methods

(>>=) :: Compile a -> (a -> Compile b) -> Compile b #

(>>) :: Compile a -> Compile b -> Compile b #

return :: a -> Compile a #

fail :: String -> Compile a #

Functor Compile # 
Instance details

Defined in Fay.Types

Methods

fmap :: (a -> b) -> Compile a -> Compile b #

(<$) :: a -> Compile b -> Compile a #

Applicative Compile # 
Instance details

Defined in Fay.Types

Methods

pure :: a -> Compile a #

(<*>) :: Compile (a -> b) -> Compile a -> Compile b #

liftA2 :: (a -> b -> c) -> Compile a -> Compile b -> Compile c #

(*>) :: Compile a -> Compile b -> Compile b #

(<*) :: Compile a -> Compile b -> Compile a #

MonadIO Compile # 
Instance details

Defined in Fay.Types

Methods

liftIO :: IO a -> Compile a #

MonadWriter CompileWriter Compile # 
Instance details

Defined in Fay.Types

MonadState CompileState Compile # 
Instance details

Defined in Fay.Types

MonadReader CompileReader Compile # 
Instance details

Defined in Fay.Types

MonadError CompileError Compile # 
Instance details

Defined in Fay.Types

class Printable a where #

Print some value.

Minimal complete definition

printJS

Methods

printJS :: a -> Printer #

Instances
Printable ModulePath #

Print a module path.

Instance details

Defined in Fay.Compiler.Print

Printable JsLit #

Print literals.

Instance details

Defined in Fay.Compiler.Print

Methods

printJS :: JsLit -> Printer #

Printable JsName #

Print one of the kinds of names.

Instance details

Defined in Fay.Compiler.Print

Methods

printJS :: JsName -> Printer #

Printable JsExp #

Print an expression.

Instance details

Defined in Fay.Compiler.Print

Methods

printJS :: JsExp -> Printer #

Printable JsStmt #

Print a single statement.

Instance details

Defined in Fay.Compiler.Print

Methods

printJS :: JsStmt -> Printer #

Printable (ModuleName l) #

Print module name.

Instance details

Defined in Fay.Compiler.Print

Methods

printJS :: ModuleName l -> Printer #

Printable (SpecialCon l) #

Print special constructors (tuples, list, etc.)

Instance details

Defined in Fay.Compiler.Print

Methods

printJS :: SpecialCon l -> Printer #

Printable (QName l) #

Print (and properly encode to JS) a qualified name.

Instance details

Defined in Fay.Compiler.Print

Methods

printJS :: QName l -> Printer #

Printable (Name l) #

Print (and properly encode) a name.

Instance details

Defined in Fay.Compiler.Print

Methods

printJS :: Name l -> Printer #

data Fay a #

The JavaScript FFI interfacing monad.

Instances
Monad Fay # 
Instance details

Defined in Fay.Types

Methods

(>>=) :: Fay a -> (a -> Fay b) -> Fay b #

(>>) :: Fay a -> Fay b -> Fay b #

return :: a -> Fay a #

fail :: String -> Fay a #

Functor Fay # 
Instance details

Defined in Fay.Types

Methods

fmap :: (a -> b) -> Fay a -> Fay b #

(<$) :: a -> Fay b -> Fay a #

Applicative Fay # 
Instance details

Defined in Fay.Types

Methods

pure :: a -> Fay a #

(<*>) :: Fay (a -> b) -> Fay a -> Fay b #

liftA2 :: (a -> b -> c) -> Fay a -> Fay b -> Fay c #

(*>) :: Fay a -> Fay b -> Fay b #

(<*) :: Fay a -> Fay b -> Fay a #

data CompileReader #

Configuration and globals for the compiler.

Constructors

CompileReader 

Fields

Instances
MonadReader CompileReader Compile # 
Instance details

Defined in Fay.Types

data CompileWriter #

Things written out by the compiler.

Constructors

CompileWriter 

Fields

Instances
Show CompileWriter # 
Instance details

Defined in Fay.Types

Semigroup CompileWriter #

Simple concatenating instance.

Instance details

Defined in Fay.Types

Monoid CompileWriter #

Simple concatenating instance.

Instance details

Defined in Fay.Types

MonadWriter CompileWriter Compile # 
Instance details

Defined in Fay.Types

data Config #

Configuration of the compiler. The fields with a leading underscore

Instances
Show Config # 
Instance details

Defined in Fay.Config

Default Config #

Default configuration.

Instance details

Defined in Fay.Config

Methods

def :: Config #

data CompileState #

State of the compiler.

Constructors

CompileState 

Fields

Instances
Show CompileState # 
Instance details

Defined in Fay.Types

MonadState CompileState Compile # 
Instance details

Defined in Fay.Types

data FundamentalType #

These are the data types that are serializable directly to native JS data types. Strings, floating points and arrays. The others are: actions in the JS monad, which are thunks that shouldn't be forced when serialized but wrapped up as JS zero-arg functions, and unknown types can't be converted but should at least be forced.

Instances
Show FundamentalType # 
Instance details

Defined in Fay.Types.FFI

data PrintState #

The state of the pretty printer.

Constructors

PrintState 

Fields

defaultPrintState :: PrintState #

Default state.

data PrintReader #

Global options of the printer

Constructors

PrintReader 

Fields

defaultPrintReader :: PrintReader #

default printer options (non-pretty printing)

data PrintWriter #

Output of printer

Constructors

PrintWriter 

Fields

newtype Printer #

The printer.

Instances
IsString Printer #

Write out a string, updating the current position information.

Instance details

Defined in Fay.Types.Printer

Methods

fromString :: String -> Printer #

Semigroup Printer # 
Instance details

Defined in Fay.Types.Printer

Monoid Printer # 
Instance details

Defined in Fay.Types.Printer

indented :: Printer -> Printer #

Print the given printer indented.

askIf :: (PrintReader -> Bool) -> Printer -> Printer -> Printer #

exec one of Printers depending on PrintReader property.

newline :: Printer #

Output a newline and makes next line indented when prPretty is True. Does nothing when prPretty is False

write :: String -> Printer #

Write out a raw string, respecting the indentation Note: if you pass a string with newline characters, it will print them out even if prPretty is set to False. Also next line won't be indented. If you want write a smart newline (that is the one which will be written out only if prPretty is true, and after which the line will be indented) use newline)

mapping :: SrcSpan -> Printer #

Generate a mapping from the Haskell location to the current point in the output.

data SerializeContext #

The serialization context indicates whether we're currently serializing some value or a particular field in a user-defined data type.

data ModulePath #

The name of a module split into a list for code generation.

Instances
Eq ModulePath # 
Instance details

Defined in Fay.Types.ModulePath

Ord ModulePath # 
Instance details

Defined in Fay.Types.ModulePath

Show ModulePath # 
Instance details

Defined in Fay.Types.ModulePath

Printable ModulePath #

Print a module path.

Instance details

Defined in Fay.Compiler.Print

mkModulePath :: ModuleName a -> ModulePath #

Construct the complete ModulePath from a ModuleName.

mkModulePaths :: ModuleName a -> [ModulePath] #

Construct intermediate module paths from a ModuleName. mkModulePaths A.B => [[A], [A,B]]

mkModulePathFromQName :: QName a -> ModulePath #

Converting a QName to a ModulePath is only relevant for constructors since they can conflict with module names.