{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FlexibleInstances #-} module Data.Aviation.C172.WB.C172Arms( C172Arms(..) , HasC172Arms(..) , c172ArmsPOH ) where import Control.Applicative(Applicative((<*>), pure)) import Control.Lens(makeClassy, (^.)) import Data.Aviation.Units(inches) import Data.Aviation.WB.Arm(Arm, (.->.), rangeArm, staticArm) import Data.Eq(Eq) import Data.Foldable(Foldable(foldr)) import Data.Functor(Functor(fmap), (<$>)) import Data.Ord(Ord) import Data.Traversable(Traversable(traverse)) import Prelude(Show) data C172Arms a = C172Arms { _frontseat :: a , _rearseat :: a , _fuel :: a , _baggagea :: a , _baggageb :: a } deriving (Eq, Ord, Show) makeClassy ''C172Arms instance Functor C172Arms where fmap k (C172Arms t r f a b) = C172Arms (k t) (k r) (k f) (k a) (k b) instance Applicative C172Arms where pure a = C172Arms a a a a a C172Arms f1 f2 f3 f4 f5 <*> C172Arms a1 a2 a3 a4 a5 = C172Arms (f1 a1) (f2 a2) (f3 a3) (f4 a4) (f5 a5) instance Foldable C172Arms where foldr k z (C172Arms t r f a b) = foldr k z [t,r,f,a,b] instance Traversable C172Arms where traverse k (C172Arms t r f a b) = C172Arms <$> k t <*> k r <*> k f <*> k a <*> k b c172ArmsPOH :: C172Arms Arm c172ArmsPOH = C172Arms (rangeArm (37 ^. inches) (34 ^. inches .->. 46 ^. inches)) (staticArm (73 ^. inches)) (staticArm (48 ^. inches)) (rangeArm (95 ^. inches) (82 ^. inches .->. 108 ^. inches)) (rangeArm (123 ^. inches) (108 ^. inches .->. 142 ^. inches))