packages feed

hydra-0.1.1: src/main/haskell/Hydra/Impl/Haskell/Dsl/Literals.hs

-- | A DSL for constructing literal types and terms

module Hydra.Impl.Haskell.Dsl.Literals where

import Hydra.Kernel

import Data.Int


bigfloat :: Double -> Literal
bigfloat = float . FloatValueBigfloat

bigint :: Integer -> Literal
bigint = integer . IntegerValueBigint . fromIntegral

binary :: String -> Literal
binary = LiteralBinary

boolean :: Bool -> Literal
boolean = LiteralBoolean

expectBinary :: Literal -> Flow s String
expectBinary v = case v of
  LiteralBinary b -> pure b
  _ -> unexpected "binary" v

expectBoolean :: Literal -> Flow s Bool
expectBoolean v = case v of
  LiteralBoolean b -> pure b
  _ -> unexpected "boolean" v

expectFloat32 :: Literal -> Flow s Float
expectFloat32 v = case v of
  LiteralFloat (FloatValueFloat32 f) -> pure f
  _ -> unexpected "float32" v

expectFloat64 :: Literal -> Flow s Double
expectFloat64 v = case v of
  LiteralFloat (FloatValueFloat64 f) -> pure f
  _ -> unexpected "float64" v

expectInt32 :: Literal -> Flow s Int
expectInt32 v = case v of
  LiteralInteger (IntegerValueInt32 i) -> pure i
  _ -> unexpected "int32" v

expectInt64 :: Literal -> Flow s Integer
expectInt64 v = case v of
  LiteralInteger (IntegerValueInt64 i) -> pure i
  _ -> unexpected "int64" v

expectString :: Literal -> Flow s String
expectString v = case v of
  LiteralString s -> pure s
  _ -> unexpected "string" v

float32 :: Float -> Literal
float32 = float . FloatValueFloat32

float64 :: Double -> Literal
float64 = float . FloatValueFloat64

float :: FloatValue -> Literal
float = LiteralFloat

int16 :: Int16 -> Literal
int16 = integer . IntegerValueInt16 . fromIntegral

int32 :: Int -> Literal
int32 = integer . IntegerValueInt32

int64 :: Int64 -> Literal
int64 = integer . IntegerValueInt64 . fromIntegral

int8 :: Int8 -> Literal
int8 = integer . IntegerValueInt8 . fromIntegral

integer :: IntegerValue -> Literal
integer = LiteralInteger

string :: String -> Literal
string = LiteralString

uint16 :: Integer -> Literal
uint16 = integer . IntegerValueUint16 . fromIntegral

uint32 :: Integer -> Literal
uint32 = integer . IntegerValueUint32 . fromIntegral

uint64 :: Integer -> Literal
uint64 = integer . IntegerValueUint64 . fromIntegral

uint8 :: Integer -> Literal
uint8 = integer . IntegerValueUint8 . fromIntegral