{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Lattices.UnitInterval(
UnitInterval(..),
mkUnitInterval
) where
import Lattices.ResiduatedLattice
newtype UnitInterval = UnitInterval Double
deriving (UnitInterval -> UnitInterval -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UnitInterval -> UnitInterval -> Bool
$c/= :: UnitInterval -> UnitInterval -> Bool
== :: UnitInterval -> UnitInterval -> Bool
$c== :: UnitInterval -> UnitInterval -> Bool
Eq, Eq UnitInterval
UnitInterval -> UnitInterval -> Bool
UnitInterval -> UnitInterval -> Ordering
UnitInterval -> UnitInterval -> UnitInterval
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: UnitInterval -> UnitInterval -> UnitInterval
$cmin :: UnitInterval -> UnitInterval -> UnitInterval
max :: UnitInterval -> UnitInterval -> UnitInterval
$cmax :: UnitInterval -> UnitInterval -> UnitInterval
>= :: UnitInterval -> UnitInterval -> Bool
$c>= :: UnitInterval -> UnitInterval -> Bool
> :: UnitInterval -> UnitInterval -> Bool
$c> :: UnitInterval -> UnitInterval -> Bool
<= :: UnitInterval -> UnitInterval -> Bool
$c<= :: UnitInterval -> UnitInterval -> Bool
< :: UnitInterval -> UnitInterval -> Bool
$c< :: UnitInterval -> UnitInterval -> Bool
compare :: UnitInterval -> UnitInterval -> Ordering
$ccompare :: UnitInterval -> UnitInterval -> Ordering
Ord, Integer -> UnitInterval
UnitInterval -> UnitInterval
UnitInterval -> UnitInterval -> UnitInterval
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> UnitInterval
$cfromInteger :: Integer -> UnitInterval
signum :: UnitInterval -> UnitInterval
$csignum :: UnitInterval -> UnitInterval
abs :: UnitInterval -> UnitInterval
$cabs :: UnitInterval -> UnitInterval
negate :: UnitInterval -> UnitInterval
$cnegate :: UnitInterval -> UnitInterval
* :: UnitInterval -> UnitInterval -> UnitInterval
$c* :: UnitInterval -> UnitInterval -> UnitInterval
- :: UnitInterval -> UnitInterval -> UnitInterval
$c- :: UnitInterval -> UnitInterval -> UnitInterval
+ :: UnitInterval -> UnitInterval -> UnitInterval
$c+ :: UnitInterval -> UnitInterval -> UnitInterval
Num, Num UnitInterval
Ord UnitInterval
UnitInterval -> Rational
forall a. Num a -> Ord a -> (a -> Rational) -> Real a
toRational :: UnitInterval -> Rational
$ctoRational :: UnitInterval -> Rational
Real, Fractional UnitInterval
Real UnitInterval
forall b. Integral b => UnitInterval -> b
forall b. Integral b => UnitInterval -> (b, UnitInterval)
forall a.
Real a
-> Fractional a
-> (forall b. Integral b => a -> (b, a))
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> RealFrac a
floor :: forall b. Integral b => UnitInterval -> b
$cfloor :: forall b. Integral b => UnitInterval -> b
ceiling :: forall b. Integral b => UnitInterval -> b
$cceiling :: forall b. Integral b => UnitInterval -> b
round :: forall b. Integral b => UnitInterval -> b
$cround :: forall b. Integral b => UnitInterval -> b
truncate :: forall b. Integral b => UnitInterval -> b
$ctruncate :: forall b. Integral b => UnitInterval -> b
properFraction :: forall b. Integral b => UnitInterval -> (b, UnitInterval)
$cproperFraction :: forall b. Integral b => UnitInterval -> (b, UnitInterval)
RealFrac, Num UnitInterval
Rational -> UnitInterval
UnitInterval -> UnitInterval
UnitInterval -> UnitInterval -> UnitInterval
forall a.
Num a
-> (a -> a -> a) -> (a -> a) -> (Rational -> a) -> Fractional a
fromRational :: Rational -> UnitInterval
$cfromRational :: Rational -> UnitInterval
recip :: UnitInterval -> UnitInterval
$crecip :: UnitInterval -> UnitInterval
/ :: UnitInterval -> UnitInterval -> UnitInterval
$c/ :: UnitInterval -> UnitInterval -> UnitInterval
Fractional)
instance BoundedLattice UnitInterval where
/\ :: UnitInterval -> UnitInterval -> UnitInterval
(/\) = forall a. Ord a => a -> a -> a
min
\/ :: UnitInterval -> UnitInterval -> UnitInterval
(\/) = forall a. Ord a => a -> a -> a
max
top :: UnitInterval
top = UnitInterval
1
bot :: UnitInterval
bot = UnitInterval
0
mkLattice :: Double -> UnitInterval
mkLattice = Double -> UnitInterval
mkUnitInterval
instance Show UnitInterval where
show :: UnitInterval -> String
show (UnitInterval Double
x) = forall a. Show a => a -> String
show Double
x
mkUnitInterval :: Double -> UnitInterval
mkUnitInterval :: Double -> UnitInterval
mkUnitInterval Double
x = Double -> UnitInterval
UnitInterval forall a b. (a -> b) -> a -> b
$ forall a. Ord a => a -> a -> a
max Double
0 forall a b. (a -> b) -> a -> b
$ forall a. Ord a => a -> a -> a
min Double
1 Double
x