cryptol-2.3.0: Cryptol: The Language of Cryptography

Copyright(c) 2013-2016 Galois, Inc.
LicenseBSD3
Maintainercryptol@galois.com
Stabilityprovisional
Portabilityportable
Safe HaskellSafe
LanguageHaskell98

Cryptol.Eval.Value

Description

 

Synopsis

Documentation

data BV Source

width, value Invariant: The value must be within the range 0 .. 2^width-1

Constructors

BV !Integer !Integer 

mkBv :: Integer -> Integer -> BV Source

Smart constructor for BVs that checks for the width limit

data GenValue b w Source

Generic value type, parameterized by bit and word types.

Constructors

VRecord [(Ident, GenValue b w)] 
VTuple [GenValue b w] 
VBit b 
VSeq Bool [GenValue b w] 
VWord w 
VStream [GenValue b w] 
VFun (GenValue b w -> GenValue b w) 
VPoly (TValue -> GenValue b w) 

Instances

newtype TValue Source

An evaluated type. These types do not contain type variables, type synonyms, or type functions.

Constructors

TValue 

Fields

tValTy :: Type
 

data PPOpts Source

Constructors

PPOpts 

class BitWord b w where Source

Methods

packWord :: [b] -> w Source

NOTE this assumes that the sequence of bits is big-endian and finite, so the first element of the list will be the most significant bit.

unpackWord :: w -> [b] Source

NOTE this produces a list of bits that represent a big-endian word, so the most significant bit is the first element of the list.

Instances

mask Source

Arguments

:: Integer

Bit-width

-> Integer

Value

-> Integer

Masked result

word :: Integer -> Integer -> Value Source

Create a packed word of n bits.

lam :: (GenValue b w -> GenValue b w) -> GenValue b w Source

tlam :: (TValue -> GenValue b w) -> GenValue b w Source

A type lambda that expects a Type.

toStream :: [GenValue b w] -> GenValue b w Source

Generate a stream.

boolToWord :: [Bool] -> Value Source

This is strict!

toSeq :: TValue -> TValue -> [GenValue b w] -> GenValue b w Source

Construct either a finite sequence, or a stream. In the finite case, record whether or not the elements were bits, to aid pretty-printing.

toPackedSeq :: TValue -> TValue -> [Value] -> Value Source

Construct one of: * a word, when the sequence is finite and the elements are bits * a sequence, when the sequence is finite but the elements aren't bits * a stream, when the sequence is not finite

NOTE: do not use this constructor in the case where the thing may be a finite, but recursive, sequence.

fromVBit :: GenValue b w -> b Source

Extract a bit value.

fromSeq :: BitWord b w => GenValue b w -> [GenValue b w] Source

Extract a sequence.

fromVWord :: BitWord b w => GenValue b w -> w Source

Extract a packed word.

fromWord :: Value -> Integer Source

Turn a value into an integer represented by w bits.

fromVFun :: GenValue b w -> GenValue b w -> GenValue b w Source

Extract a function from a value.

fromVPoly :: GenValue b w -> TValue -> GenValue b w Source

Extract a polymorphic function from a value.

fromVTuple :: GenValue b w -> [GenValue b w] Source

Extract a tuple from a value.

fromVRecord :: GenValue b w -> [(Ident, GenValue b w)] Source

Extract a record from a value.

lookupRecord :: Ident -> GenValue b w -> GenValue b w Source

Lookup a field in a record.

toExpr :: PrimMap -> Type -> Value -> Maybe Expr Source

Given an expected type, returns an expression that evaluates to this value, if we can determine it.

XXX: View patterns would probably clean up this definition a lot.