{-# LANGUAGE OverloadedStrings #-}
module PlutusCore.Check.Value
    ( isTermValue
    ) where

import PlutusCore.Core
import PlutusCore.Error

import Data.Either

isTermValue :: Term tyname name uni fun ann -> Bool
isTermValue :: forall tyname name (uni :: * -> *) fun ann.
Term tyname name uni fun ann -> Bool
isTermValue = Either (NormCheckError tyname name uni fun ann) () -> Bool
forall a b. Either a b -> Bool
isRight (Either (NormCheckError tyname name uni fun ann) () -> Bool)
-> (Term tyname name uni fun ann
    -> Either (NormCheckError tyname name uni fun ann) ())
-> Term tyname name uni fun ann
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Term tyname name uni fun ann
-> Either (NormCheckError tyname name uni fun ann) ()
forall tyname name (uni :: * -> *) fun ann.
Term tyname name uni fun ann
-> Either (NormCheckError tyname name uni fun ann) ()
termValue

termValue :: Term tyname name uni fun ann -> Either (NormCheckError tyname name uni fun ann) ()
termValue :: forall tyname name (uni :: * -> *) fun ann.
Term tyname name uni fun ann
-> Either (NormCheckError tyname name uni fun ann) ()
termValue (IWrap ann
_ Type tyname uni ann
_ Type tyname uni ann
_ Term tyname name uni fun ann
term) = Term tyname name uni fun ann
-> Either (NormCheckError tyname name uni fun ann) ()
forall tyname name (uni :: * -> *) fun ann.
Term tyname name uni fun ann
-> Either (NormCheckError tyname name uni fun ann) ()
termValue Term tyname name uni fun ann
term
termValue LamAbs {}          = () -> Either (NormCheckError tyname name uni fun ann) ()
forall a. a -> Either (NormCheckError tyname name uni fun ann) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
termValue TyAbs {}           = () -> Either (NormCheckError tyname name uni fun ann) ()
forall a. a -> Either (NormCheckError tyname name uni fun ann) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
termValue Constant {}        = () -> Either (NormCheckError tyname name uni fun ann) ()
forall a. a -> Either (NormCheckError tyname name uni fun ann) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
termValue Term tyname name uni fun ann
t                  = NormCheckError tyname name uni fun ann
-> Either (NormCheckError tyname name uni fun ann) ()
forall a b. a -> Either a b
Left (NormCheckError tyname name uni fun ann
 -> Either (NormCheckError tyname name uni fun ann) ())
-> NormCheckError tyname name uni fun ann
-> Either (NormCheckError tyname name uni fun ann) ()
forall a b. (a -> b) -> a -> b
$ ann
-> Term tyname name uni fun ann
-> Text
-> NormCheckError tyname name uni fun ann
forall tyname name (uni :: * -> *) fun ann.
ann
-> Term tyname name uni fun ann
-> Text
-> NormCheckError tyname name uni fun ann
BadTerm (Term tyname name uni fun ann -> ann
forall tyname name (uni :: * -> *) fun ann.
Term tyname name uni fun ann -> ann
termAnn Term tyname name uni fun ann
t) Term tyname name uni fun ann
t Text
"term value"