Copyright | (c) 2011-2013 Toralf Wittner |
---|---|
License | MIT |
Maintainer | Toralf Wittner <tw@dtex.org> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | Safe-Inferred |
Language | Haskell98 |
Data.Restricted
Description
Type-level restricted data.
This module allows for type declarations which embed certain restrictions,
such as value bounds. E.g. Restricted N0 N1 Int
denotes an Int
which can
only have values [0 .. 1]. When creating such a value, the constructor functions
restrict
or toRestricted
ensure that the restrictions are obeyed. Code
that consumes restricted types does not need to check the constraints.
N.B. This module is more or less tailored to be used within ZMQ3
.
Therefore the provided type level restrictions are limited.
Synopsis
- data Restricted r v
- class Restriction r v where
- toRestricted :: v -> Maybe (Restricted r v)
- restrict :: v -> Restricted r v
- rvalue :: Restricted r v -> v
- data Nneg1
- data N1
- data N0
- data N254
- data Inf
- data Div4
- data Div5
Documentation
data Restricted r v #
Type level restriction.
Instances
Show v => Show (Restricted r v) # | |
Defined in Data.Restricted Methods showsPrec :: Int -> Restricted r v -> ShowS # show :: Restricted r v -> String # showList :: [Restricted r v] -> ShowS # |
class Restriction r v where #
A uniform way to restrict values.
Methods
toRestricted :: v -> Maybe (Restricted r v) #
Create a restricted value. Returns Nothing
if
the given value does not satisfy all restrictions.
restrict :: v -> Restricted r v #
Create a restricted value. If the given value does not satisfy the restrictions, a modified variant is used instead, e.g. if an integer is larger than the upper bound, the upper bound value is used.
Instances
rvalue :: Restricted r v -> v #
Get the actual value.
type level -1
Instances
Show Nneg1 # | |
Integral a => Restriction (Nneg1, Int32) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (Nneg1, Int32) a) # restrict :: a -> Restricted (Nneg1, Int32) a # | |
Integral a => Restriction (Nneg1, Int64) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (Nneg1, Int64) a) # restrict :: a -> Restricted (Nneg1, Int64) a # | |
Integral a => Restriction (Nneg1, Inf) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (Nneg1, Inf) a) # restrict :: a -> Restricted (Nneg1, Inf) a # |
type-level 1
Instances
Show N1 # | |
Integral a => Restriction (N1, Int32) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (N1, Int32) a) # restrict :: a -> Restricted (N1, Int32) a # | |
Integral a => Restriction (N1, Int64) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (N1, Int64) a) # restrict :: a -> Restricted (N1, Int64) a # | |
Integral a => Restriction (N1, Inf) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (N1, Inf) a) # restrict :: a -> Restricted (N1, Inf) a # | |
Restriction (N1, N254) String # | |
Defined in Data.Restricted Methods toRestricted :: String -> Maybe (Restricted (N1, N254) String) # | |
Restriction (N1, N254) ByteString # | |
Defined in Data.Restricted Methods toRestricted :: ByteString -> Maybe (Restricted (N1, N254) ByteString) # restrict :: ByteString -> Restricted (N1, N254) ByteString # |
type-level 0
Instances
Show N0 # | |
Integral a => Restriction (N0, Int32) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (N0, Int32) a) # restrict :: a -> Restricted (N0, Int32) a # | |
Integral a => Restriction (N0, Int64) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (N0, Int64) a) # restrict :: a -> Restricted (N0, Int64) a # | |
Integral a => Restriction (N0, Inf) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (N0, Inf) a) # restrict :: a -> Restricted (N0, Inf) a # | |
Restriction (N0, N254) ByteString # | |
Defined in Data.Restricted Methods toRestricted :: ByteString -> Maybe (Restricted (N0, N254) ByteString) # restrict :: ByteString -> Restricted (N0, N254) ByteString # |
type-level 254
Instances
Show N254 # | |
Restriction (N1, N254) String # | |
Defined in Data.Restricted Methods toRestricted :: String -> Maybe (Restricted (N1, N254) String) # | |
Restriction (N1, N254) ByteString # | |
Defined in Data.Restricted Methods toRestricted :: ByteString -> Maybe (Restricted (N1, N254) ByteString) # restrict :: ByteString -> Restricted (N1, N254) ByteString # | |
Restriction (N0, N254) ByteString # | |
Defined in Data.Restricted Methods toRestricted :: ByteString -> Maybe (Restricted (N0, N254) ByteString) # restrict :: ByteString -> Restricted (N0, N254) ByteString # |
type-level infinity
Instances
Show Inf # | |
Integral a => Restriction (N1, Inf) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (N1, Inf) a) # restrict :: a -> Restricted (N1, Inf) a # | |
Integral a => Restriction (N0, Inf) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (N0, Inf) a) # restrict :: a -> Restricted (N0, Inf) a # | |
Integral a => Restriction (Nneg1, Inf) a # | |
Defined in Data.Restricted Methods toRestricted :: a -> Maybe (Restricted (Nneg1, Inf) a) # restrict :: a -> Restricted (Nneg1, Inf) a # |
divisable by 4
Instances
Show Div4 # | |
Restriction Div4 ByteString # | |
Defined in Data.Restricted Methods toRestricted :: ByteString -> Maybe (Restricted Div4 ByteString) # restrict :: ByteString -> Restricted Div4 ByteString # |
divisable by 5
Instances
Show Div5 # | |
Restriction Div5 ByteString # | |
Defined in Data.Restricted Methods toRestricted :: ByteString -> Maybe (Restricted Div5 ByteString) # restrict :: ByteString -> Restricted Div5 ByteString # |