aviation-cessna172-weight-balance (empty) → 0.0.2
raw patch · 8 files changed
+313/−0 lines, 8 filesdep +aviation-unitsdep +aviation-weight-balancedep +basesetup-changed
Dependencies added: aviation-units, aviation-weight-balance, base, lens
Files
- LICENCE +31/−0
- Setup.hs +2/−0
- aviation-cessna172-weight-balance.cabal +42/−0
- changelog +7/−0
- src/Data/Aviation/C172/WB.hs +7/−0
- src/Data/Aviation/C172/WB/C172AircraftArms.hs +105/−0
- src/Data/Aviation/C172/WB/C172Arms.hs +67/−0
- src/Data/Aviation/C172/WB/C172MomentEnvelope.hs +52/−0
+ LICENCE view
@@ -0,0 +1,31 @@+Copyright (c) 2017-2019, Commonwealth Scientific and Industrial Research Organisation+Copyright (c) 2019-2021, Tony Morris++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of QFPL nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ aviation-cessna172-weight-balance.cabal view
@@ -0,0 +1,42 @@+name: aviation-cessna172-weight-balance+version: 0.0.2+license: BSD3+license-file: LICENCE+author: Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>, Joshua Morris <ɯoɔ˙lᴉɐɯƃ@llǝʞsɐɥ+sᴉɹɹoɯuɥoɾɐnɥsoɾ>+maintainer: Tony Morris, Joshua Morris+copyright: Copyright (c) 2021, Tony Morris+synopsis: Weight and Balance for the Cessna 172 aircraft in aviation.+category: Aviation+description:+ Weight and Balance for the Cessna 172 aircraft in aviation.+homepage: https://gitlab.com/tonymorris/aviation-cessna172-weight-balance+bug-reports: https://gitlab.com/tonymorris/aviation-cessna172-weight-balance/issues+cabal-version: >= 1.10+build-type: Simple+extra-source-files: changelog++source-repository head+ type: git+ location: git@gitlab.com:tonymorris/aviation-cessna172-weight-balance.git++library+ default-language:+ Haskell2010++ build-depends:+ base >= 4.8 && < 5+ , lens >= 4.15 && < 5+ , aviation-weight-balance >= 0.0.2 && < 1+ , aviation-units >= 0.0.2 && < 1++ ghc-options:+ -Wall++ hs-source-dirs:+ src++ exposed-modules:+ Data.Aviation.C172.WB+ Data.Aviation.C172.WB.C172AircraftArms+ Data.Aviation.C172.WB.C172Arms+ Data.Aviation.C172.WB.C172MomentEnvelope
+ changelog view
@@ -0,0 +1,7 @@+0.0.2++* Update GHC++0.0.1++* Initial release
+ src/Data/Aviation/C172/WB.hs view
@@ -0,0 +1,7 @@+module Data.Aviation.C172.WB(+ module A+) where++import Data.Aviation.C172.WB.C172Arms as A+import Data.Aviation.C172.WB.C172AircraftArms as A+import Data.Aviation.C172.WB.C172MomentEnvelope as A
+ src/Data/Aviation/C172/WB/C172AircraftArms.hs view
@@ -0,0 +1,105 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE FlexibleInstances #-}++module Data.Aviation.C172.WB.C172AircraftArms(+ C172AircraftArms(..)+, HasC172AircraftArms(..)+, bewC172AircraftArms+, zfwMoment+, ffwMoment+, ufwMoment+, totalC172Moment+) where++import Control.Applicative(Applicative((<*>), pure))+import Control.Category((.))+import Control.Lens(makeClassy, lens, (^.), (.~), (&))+import Data.Aviation.C172.WB.C172Arms(C172Arms, HasC172Arms(c172Arms), fuel, c172ArmsPOH)+import Data.Aviation.Units(Pounds(pounds))+import Data.Aviation.WB(ArmStatic)+import Data.Aviation.WB.Arm(Arm, HasArmStatic, staticArm)+import Data.Aviation.WB.Weight(HasWeight(weight))+import Data.Aviation.WB.Moment(Moment, momentX)+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 C172AircraftArms a =+ C172AircraftArms {+ _basicEmptyWeight ::+ a+ , c172Arms_ ::+ C172Arms a+ }+ deriving (Eq, Ord, Show)++makeClassy ''C172AircraftArms++instance HasC172Arms (C172AircraftArms a) a where+ c172Arms =+ lens+ (\(C172AircraftArms _ c) -> c)+ (\(C172AircraftArms c _) a -> C172AircraftArms c a)++instance Functor C172AircraftArms where+ fmap k (C172AircraftArms c x) =+ C172AircraftArms (k c) (fmap k x)++instance Applicative C172AircraftArms where+ pure a =+ C172AircraftArms a (pure a)+ C172AircraftArms c1 c2 <*> C172AircraftArms x1 x2 =+ C172AircraftArms (c1 x1) (c2 <*> x2)++instance Foldable C172AircraftArms where+ foldr k z (C172AircraftArms c x) =+ k c (foldr k z x)++instance Traversable C172AircraftArms where+ traverse k (C172AircraftArms c x) =+ C172AircraftArms <$> k c <*> traverse k x++bewC172AircraftArms ::+ ArmStatic+ -> C172AircraftArms Arm+bewC172AircraftArms a =+ C172AircraftArms+ (staticArm a)+ c172ArmsPOH++-- zero fuel+zfwMoment ::+ C172AircraftArms Moment+ -> C172AircraftArms Moment+zfwMoment x =+ x & fuel . weight .~ 0 ^. pounds++-- full fuel+ffwMoment ::+ C172AircraftArms Moment+ -> C172AircraftArms Moment+ffwMoment x =+ x & fuel . weight .~ 336 ^. pounds++-- unusable fuel+ufwMoment ::+ C172AircraftArms Moment+ -> C172AircraftArms Moment+ufwMoment x =+ x & fuel . weight .~ 18 ^. pounds+++totalC172Moment ::+ (HasWeight w, HasArmStatic s) =>+ w+ -> C172Arms w+ -> C172AircraftArms s+ -> C172AircraftArms Moment+totalC172Moment bew wt am =+ momentX (C172AircraftArms bew wt) am
+ src/Data/Aviation/C172/WB/C172Arms.hs view
@@ -0,0 +1,67 @@+{-# 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))
+ src/Data/Aviation/C172/WB/C172MomentEnvelope.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Data.Aviation.C172.WB.C172MomentEnvelope(+ c172rNormalCategory+, c172sNormalCategory+, c172UtilityCategory+) where++import Prelude(Fractional)++c172rNormalCategory ::+ Fractional a =>+ [(a, a)]+c172rNormalCategory =+ c172NormalCategory+ (98, 2450)++c172sNormalCategory ::+ Fractional a =>+ [(a, a)]+c172sNormalCategory =+ c172NormalCategory+ (120.5, 2550)++c172UtilityCategory ::+ Fractional a =>+ [(a, a)]+c172UtilityCategory =+ [+ (61, 1500)+ , (89, 2200)+ , (82.5, 2200)+ , (68, 1950)+ , (52.5, 1500)+ ]+ +-- not exported+++c172NormalCategory ::+ Fractional a =>+ (a, a)+ -> [(a, a)]+c172NormalCategory x =+ [+ x+ , (71, 1500)+ , (61, 1500)+ , (89, 2200)+ , (82.5, 2200)+ , (104.5, 2550)+ ]