{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
module Hasmin.Types.PercentageLength
( PercentageLength
, isZero
, isNonZeroPercentage
, minifyPL
) where
import Control.Monad.Reader (Reader)
import Hasmin.Class
import Hasmin.Config
import Hasmin.Types.Dimension
import Hasmin.Types.Numeric
type PercentageLength = Either Percentage Length
minifyPL :: PercentageLength -> Reader Config PercentageLength
minifyPL x@(Right _) = mapM minify x
minifyPL x@(Left p)
| p == 0 = pure $ Right NullLength
| otherwise = pure x
isNonZeroPercentage :: PercentageLength -> Bool
isNonZeroPercentage (Left p) = p /= 0
isNonZeroPercentage _ = False
isZero :: (Num a, Eq a) => Either a Length -> Bool
isZero = either (== 0) isZeroLen