packages feed

linear-base-0.1.0: src/Data/Bool/Linear.hs

{-# LANGUAGE LinearTypes #-}
{-# LANGUAGE NoImplicitPrelude #-}

-- | This module provides linear functions on the standard 'Bool' type.
module Data.Bool.Linear
  ( -- * The Boolean type
    Bool(..)
    -- * Operators
  , (&&)
  , (||)
  , not
  , otherwise
  )
  where

import Prelude (Bool(..), otherwise)

-- | @True@ iff both are @True@.
-- __NOTE:__ this is strict and not lazy!
(&&) :: Bool %1-> Bool %1-> Bool
False && False = False
False && True = False
True && x = x

infixr 3 &&

-- | @True@ iff either is @True@
-- __NOTE:__ this is strict and not lazy!
(||) :: Bool %1-> Bool %1-> Bool
True || False = True
True || True = True
False || x = x

infixr 2 ||

-- | @not b@ is @True@ iff b is @False@
-- __NOTE:__ this is strict and not lazy!
not :: Bool %1-> Bool
not False = True
not True = False