keter-1.3.8: Web application deployment manager, focusing on Haskell web frameworks

Safe HaskellNone
LanguageHaskell98

Keter.Types.Common

Synopsis

Documentation

type Appname = Text Source

Name of the application. Should just be the basename of the application file.

data Plugin Source

Constructors

Plugin 

Fields

pluginGetEnv :: Appname -> Object -> IO [(Text, Text)]
 

class ToCurrent a where Source

Used for versioning data types.

Associated Types

type Previous a Source

Methods

toCurrent :: Previous a -> a Source

type Port = Int Source

A port for an individual app to listen on.

type Host = CI Text Source

A virtual host we want to serve content from.

data AppId Source

Constructors

AIBuiltin 
AINamed !Appname 

Instances

data Text :: *

Instances

IsList Text 
Eq Text 
Data Text 
Ord Text 
Read Text 
Show Text 
IsString Text 
Monoid Text 
NFData Text 
FoldCase Text 
Hashable Text 
Semigroup Text 
ToJSON Text 
FromJSON Text 
Chunk Text 
Typeable * Text 
Monad m => Stream Text m Char 
(~) * a Text => IsString (Parser a) 
ToJSON v => ToJSON (Map Text v) 
ToJSON v => ToJSON (HashMap Text v) 
FromJSON v => FromJSON (Map Text v) 
FromJSON v => FromJSON (HashMap Text v) 
type Item Text = Char 
type State Text = Buffer 
type ChunkElem Text = Char 

data ByteString :: *

A space-efficient representation of a Word8 vector, supporting many efficient operations.

A ByteString contains 8-bit bytes, or by using the operations from Data.ByteString.Char8 it can be interpreted as containing 8-bit characters.

Instances

Eq ByteString 
Data ByteString 
Ord ByteString 
Read ByteString 
Show ByteString 
IsString ByteString 
Monoid ByteString 
NFData ByteString 
FoldCase ByteString 
Hashable ByteString 
Semigroup ByteString 
Extract ByteString 
Chunk ByteString 
Typeable * ByteString 
RegexLike Regex ByteString 
RegexContext Regex ByteString ByteString 
Monad m => Stream ByteString m Char 
RegexMaker Regex CompOption ExecOption ByteString 
(~) * a ByteString => IsString (Parser a) 
type State ByteString = Buffer 
type ChunkElem ByteString = Word8 

data Set a :: * -> *

A set of values a.

Instances

Foldable Set 
Eq a => Eq (Set a) 
(Data a, Ord a) => Data (Set a) 
Ord a => Ord (Set a) 
(Read a, Ord a) => Read (Set a) 
Show a => Show (Set a) 
Ord a => Monoid (Set a) 
NFData a => NFData (Set a) 
Ord a => Semigroup (Set a) 
ToJSON a => ToJSON (Set a) 
(Ord a, FromJSON a) => FromJSON (Set a) 
(ParseYamlFile a, Ord a) => ParseYamlFile (Set a) 
Default (Set v) 
Typeable (* -> *) Set 

data Map k a :: * -> * -> *

A Map from keys k to values a.

Instances

Functor (Map k) 
Foldable (Map k) 
Traversable (Map k) 
(Eq k, Eq a) => Eq (Map k a) 
(Data k, Data a, Ord k) => Data (Map k a) 
(Ord k, Ord v) => Ord (Map k v) 
(Ord k, Read k, Read e) => Read (Map k e) 
(Show k, Show a) => Show (Map k a) 
Ord k => Monoid (Map k v) 
(NFData k, NFData a) => NFData (Map k a) 
Ord k => Semigroup (Map k v) 
ToJSON v => ToJSON (Map String v) 
ToJSON v => ToJSON (Map Text v) 
ToJSON v => ToJSON (Map Text v) 
FromJSON v => FromJSON (Map String v) 
FromJSON v => FromJSON (Map Text v) 
FromJSON v => FromJSON (Map Text v) 
Default (Map k v) 
Typeable (* -> * -> *) Map 

class (Typeable * e, Show e) => Exception e

Any type that you wish to throw or catch as an exception must be an instance of the Exception class. The simplest case is a new exception type directly below the root:

data MyException = ThisException | ThatException
    deriving (Show, Typeable)

instance Exception MyException

The default method definitions in the Exception class do what we need in this case. You can now throw and catch ThisException and ThatException as exceptions:

*Main> throw ThisException `catch` \e -> putStrLn ("Caught " ++ show (e :: MyException))
Caught ThisException

In more complicated examples, you may wish to define a whole hierarchy of exceptions:

---------------------------------------------------------------------
-- Make the root exception type for all the exceptions in a compiler

data SomeCompilerException = forall e . Exception e => SomeCompilerException e
    deriving Typeable

instance Show SomeCompilerException where
    show (SomeCompilerException e) = show e

instance Exception SomeCompilerException

compilerExceptionToException :: Exception e => e -> SomeException
compilerExceptionToException = toException . SomeCompilerException

compilerExceptionFromException :: Exception e => SomeException -> Maybe e
compilerExceptionFromException x = do
    SomeCompilerException a <- fromException x
    cast a

---------------------------------------------------------------------
-- Make a subhierarchy for exceptions in the frontend of the compiler

data SomeFrontendException = forall e . Exception e => SomeFrontendException e
    deriving Typeable

instance Show SomeFrontendException where
    show (SomeFrontendException e) = show e

instance Exception SomeFrontendException where
    toException = compilerExceptionToException
    fromException = compilerExceptionFromException

frontendExceptionToException :: Exception e => e -> SomeException
frontendExceptionToException = toException . SomeFrontendException

frontendExceptionFromException :: Exception e => SomeException -> Maybe e
frontendExceptionFromException x = do
    SomeFrontendException a <- fromException x
    cast a

---------------------------------------------------------------------
-- Make an exception type for a particular frontend compiler exception

data MismatchedParentheses = MismatchedParentheses
    deriving (Typeable, Show)

instance Exception MismatchedParentheses where
    toException   = frontendExceptionToException
    fromException = frontendExceptionFromException

We can now catch a MismatchedParentheses exception as MismatchedParentheses, SomeFrontendException or SomeCompilerException, but not other types, e.g. IOException:

*Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: MismatchedParentheses))
Caught MismatchedParentheses
*Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: SomeFrontendException))
Caught MismatchedParentheses
*Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: SomeCompilerException))
Caught MismatchedParentheses
*Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: IOException))
*** Exception: MismatchedParentheses

data SomeException :: *

The SomeException type is the root of the exception type hierarchy. When an exception of type e is thrown, behind the scenes it is encapsulated in a SomeException.