module Language.Fortran.Repr.Value.Scalar.Logical.Machine where
import Language.Fortran.Repr.Value.Scalar.Int.Machine
fLogicalToBool :: FInt -> Bool
fLogicalToBool :: FInt -> Bool
fLogicalToBool = (forall a. FKindedC FInt a => a -> Bool) -> FInt -> Bool
forall r. (forall a. FKindedC FInt a => a -> r) -> FInt -> r
fIntUOp ((forall a. FKindedC FInt a => a -> Bool) -> FInt -> Bool)
-> (forall a. FKindedC FInt a => a -> Bool) -> FInt -> Bool
forall a b. (a -> b) -> a -> b
$ Bool -> Bool -> a -> Bool
forall a r. (Num a, Eq a) => r -> r -> a -> r
consumeFLogicalNumeric Bool
True Bool
False
fLogicalNumericFromBool :: Num a => Bool -> a
fLogicalNumericFromBool :: forall a. Num a => Bool -> a
fLogicalNumericFromBool = \case Bool
True -> a
1; Bool
False -> a
0
consumeFLogicalNumeric :: (Num a, Eq a) => r -> r -> a -> r
consumeFLogicalNumeric :: forall a r. (Num a, Eq a) => r -> r -> a -> r
consumeFLogicalNumeric r
whenTrue r
whenFalse a
bi =
if a
bi a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
1 then r
whenTrue else r
whenFalse
fLogicalNot :: FInt -> FInt
fLogicalNot :: FInt -> FInt
fLogicalNot = (forall a. FKindedC FInt a => a -> a) -> FInt -> FInt
fIntUOpInplace (a -> a -> a -> a
forall a r. (Num a, Eq a) => r -> r -> a -> r
consumeFLogicalNumeric a
0 a
1)