Copyright | (c) Sirui Lu 2021-2023 |
---|---|
License | BSD-3-Clause (see the LICENSE file) |
Maintainer | siruilu@cs.washington.edu |
Stability | Experimental |
Portability | GHC only |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Function operations
class Function f arg ret | f -> arg ret where Source #
Abstraction for function-like types.
(#) :: f -> arg -> ret infixl 9 Source #
Function application operator.
The operator is not right associated (like ($)
). It is left associated,
and you can provide many arguments with this operator once at a time.
>>>
(+1) # 2
3
>>>
(+) # 2 # 3
5
Instances
(Function f arg ret, Mergeable f, Mergeable ret) => Function (UnionM f) arg (UnionM ret) Source # | |
(LinkedRep a sa, LinkedRep b sb) => Function (a --> b) sa sb Source # | |
Defined in Grisette.Internal.SymPrim.GeneralFun | |
(SupportedNonFuncPrim ca, SupportedPrim cb, LinkedRep ca sa, LinkedRep cb sb, SupportedPrim (ca --> cb)) => Function (sa -~> sb) sa sb Source # | |
Defined in Grisette.Internal.SymPrim.SymGeneralFun | |
(SupportedPrim ca, SupportedPrim cb, LinkedRep ca sa, LinkedRep cb sb, SupportedPrim (ca =-> cb)) => Function (sa =~> sb) sa sb Source # | |
Defined in Grisette.Internal.SymPrim.SymTabularFun | |
Eq a => Function (a =-> b) a b Source # | |
Defined in Grisette.Internal.SymPrim.TabularFun | |
Function (a -> b) a b Source # | |
Defined in Grisette.Internal.Core.Data.Class.Function |
Applying an uninterpreted function.
>>>
let f = "f" :: SymInteger =~> SymInteger =~> SymInteger
>>>
apply f "a" "b"
(apply (apply f a) b)
Note that for implementation reasons, you can also use apply
function on
a non-function symbolic value. In this case, the function is treated as an
id
function.
Instances
Apply SymBool Source # | |
Apply SymInteger Source # | |
Defined in Grisette.Internal.SymPrim.SymInteger type FunType SymInteger Source # apply :: SymInteger -> FunType SymInteger Source # | |
(KnownNat n, 1 <= n) => Apply (SymIntN n) Source # | |
(KnownNat n, 1 <= n) => Apply (SymWordN n) Source # | |
(LinkedRep ca sa, LinkedRep ct st, Apply st, SupportedNonFuncPrim ca, SupportedPrim ct, SupportedPrim (ca --> ct)) => Apply (sa -~> st) Source # | |
(LinkedRep ca sa, LinkedRep ct st, Apply st, SupportedPrim ca, SupportedPrim ct, SupportedPrim (ca =-> ct)) => Apply (sa =~> st) Source # | |
Apply b => Apply (a -> b) Source # | |