module Language.Fortran.Repr.Value.Scalar.Logical.Machine where
import Language.Fortran.Repr.Value.Scalar.Int.Machine
fLogicalToBool :: FInt k -> Bool
fLogicalToBool :: forall (k :: FTInt). FInt k -> Bool
fLogicalToBool = forall r (k :: FTInt).
(forall a. IsFInt a => a -> r) -> FInt k -> r
fIntUOp forall a b. (a -> b) -> a -> b
$ 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 forall a. Eq a => a -> a -> Bool
== a
1 then r
whenTrue else r
whenFalse
fLogicalNot :: FInt k -> FInt k
fLogicalNot :: forall (k :: FTInt). FInt k -> FInt k
fLogicalNot = forall (k :: FTInt).
(forall a. IsFInt a => a -> a) -> FInt k -> FInt k
fIntUOpInplace (forall a r. (Num a, Eq a) => r -> r -> a -> r
consumeFLogicalNumeric a
0 a
1)