{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedRecordDot #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module Tax.Canada.ON428.Fix (fixON428) where import Control.Applicative (liftA2) import Control.Monad (guard, mfilter) import Data.Fixed (Centi) import Rank2 qualified import Tax.Canada.ON428.Types import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf) fixON428 :: ON428 Maybe -> ON428 Maybe fixON428 :: ON428 Maybe -> ON428 Maybe fixON428 = (ON428 Maybe -> ON428 Maybe) -> ON428 Maybe -> ON428 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((ON428 Maybe -> ON428 Maybe) -> ON428 Maybe -> ON428 Maybe) -> (ON428 Maybe -> ON428 Maybe) -> ON428 Maybe -> ON428 Maybe forall a b. (a -> b) -> a -> b $ \on428 :: ON428 Maybe on428@ON428{Page4 Maybe Page3 Maybe Page2 Maybe Page1 Maybe page1 :: Page1 Maybe page2 :: Page2 Maybe page3 :: Page3 Maybe page4 :: Page4 Maybe $sel:page1:ON428 :: forall (line :: * -> *). ON428 line -> Page1 line $sel:page2:ON428 :: forall (line :: * -> *). ON428 line -> Page2 line $sel:page3:ON428 :: forall (line :: * -> *). ON428 line -> Page3 line $sel:page4:ON428 :: forall (line :: * -> *). ON428 line -> Page4 line ..}-> ON428{$sel:page1:ON428 :: Page1 Maybe page1 = Page1 Maybe -> Page1 Maybe fixPage1 Page1 Maybe page1, $sel:page2:ON428 :: Page2 Maybe page2 = ON428 Maybe -> Page2 Maybe -> Page2 Maybe fixPage2 ON428 Maybe on428 Page2 Maybe page2, $sel:page3:ON428 :: Page3 Maybe page3 = ON428 Maybe -> Page3 Maybe -> Page3 Maybe fixPage3 ON428 Maybe on428 Page3 Maybe page3, $sel:page4:ON428 :: Page4 Maybe page4 = ON428 Maybe -> Page4 Maybe -> Page4 Maybe fixPage4 ON428 Maybe on428 Page4 Maybe page4} fixPage1 :: Page1 Maybe -> Page1 Maybe fixPage1 :: Page1 Maybe -> Page1 Maybe fixPage1 = (Page1 Maybe -> Page1 Maybe) -> Page1 Maybe -> Page1 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page1 Maybe -> Page1 Maybe) -> Page1 Maybe -> Page1 Maybe) -> (Page1 Maybe -> Page1 Maybe) -> Page1 Maybe -> Page1 Maybe forall a b. (a -> b) -> a -> b $ \Page1{Maybe Centi Page1PartB Maybe Page1PartA Maybe line1 :: Maybe Centi partA :: Page1PartA Maybe partB :: Page1PartB Maybe $sel:line1:Page1 :: forall (line :: * -> *). Page1 line -> line Centi $sel:partA:Page1 :: forall (line :: * -> *). Page1 line -> Page1PartA line $sel:partB:Page1 :: forall (line :: * -> *). Page1 line -> Page1PartB line ..}-> Page1{ $sel:line1:Page1 :: Maybe Centi line1 = Maybe Centi line1, $sel:partA:Page1 :: Page1PartA Maybe partA = Maybe Centi -> Page1PartA Maybe -> Page1PartA Maybe fixPage1PartA Maybe Centi line1 Page1PartA Maybe partA, $sel:partB:Page1 :: Page1PartB Maybe partB = Page1PartB Maybe -> Page1PartB Maybe fixPage1PartB Page1PartB Maybe partB} fixPage1PartA :: Maybe Centi -> Page1PartA Maybe -> Page1PartA Maybe fixPage1PartA :: Maybe Centi -> Page1PartA Maybe -> Page1PartA Maybe fixPage1PartA Maybe Centi income = (Page1PartA Maybe -> Page1PartA Maybe) -> Page1PartA Maybe -> Page1PartA Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page1PartA Maybe -> Page1PartA Maybe) -> Page1PartA Maybe -> Page1PartA Maybe) -> (Page1PartA Maybe -> Page1PartA Maybe) -> Page1PartA Maybe -> Page1PartA Maybe forall a b. (a -> b) -> a -> b $ \Page1PartA{TaxIncomeBracket Maybe column1 :: TaxIncomeBracket Maybe column2 :: TaxIncomeBracket Maybe column3 :: TaxIncomeBracket Maybe column4 :: TaxIncomeBracket Maybe column5 :: TaxIncomeBracket Maybe $sel:column1:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line $sel:column2:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line $sel:column3:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line $sel:column4:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line $sel:column5:Page1PartA :: forall (line :: * -> *). Page1PartA line -> TaxIncomeBracket line ..}-> Page1PartA{ $sel:column1:Page1PartA :: TaxIncomeBracket Maybe column1 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column2) TaxIncomeBracket Maybe column1, $sel:column2:Page1PartA :: TaxIncomeBracket Maybe column2 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column3) TaxIncomeBracket Maybe column2, $sel:column3:Page1PartA :: TaxIncomeBracket Maybe column3 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column4) TaxIncomeBracket Maybe column3, $sel:column4:Page1PartA :: TaxIncomeBracket Maybe column4 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income (TaxIncomeBracket Maybe -> Maybe (TaxIncomeBracket Maybe) forall a. a -> Maybe a Just TaxIncomeBracket Maybe column5) TaxIncomeBracket Maybe column4, $sel:column5:Page1PartA :: TaxIncomeBracket Maybe column5 = Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income Maybe (TaxIncomeBracket Maybe) forall a. Maybe a Nothing TaxIncomeBracket Maybe column5} fixTaxIncomeBracket :: Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket :: Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe fixTaxIncomeBracket Maybe Centi income Maybe (TaxIncomeBracket Maybe) nextBracket bracket :: TaxIncomeBracket Maybe bracket@TaxIncomeBracket{Maybe Rational Maybe Centi line2_income :: Maybe Centi line3_threshold :: Maybe Centi line4_overThreshold :: Maybe Centi line5_rate :: Maybe Rational line6_timesRate :: Maybe Centi line7_baseTax :: Maybe Centi line8_equalsTax :: Maybe Centi $sel:line2_income:TaxIncomeBracket :: forall (line :: * -> *). TaxIncomeBracket line -> line Centi $sel:line3_threshold:TaxIncomeBracket :: forall (line :: * -> *). TaxIncomeBracket line -> line Centi $sel:line4_overThreshold:TaxIncomeBracket :: forall (line :: * -> *). TaxIncomeBracket line -> line Centi $sel:line5_rate:TaxIncomeBracket :: forall (line :: * -> *). TaxIncomeBracket line -> line Rational $sel:line6_timesRate:TaxIncomeBracket :: forall (line :: * -> *). TaxIncomeBracket line -> line Centi $sel:line7_baseTax:TaxIncomeBracket :: forall (line :: * -> *). TaxIncomeBracket line -> line Centi $sel:line8_equalsTax:TaxIncomeBracket :: forall (line :: * -> *). TaxIncomeBracket line -> line Centi ..} = TaxIncomeBracket Maybe bracket{ $sel:line2_income:TaxIncomeBracket :: Maybe Centi line2_income = do Centi i <- Maybe Centi income Centi floor <- Maybe Centi line3_threshold let ceiling :: Maybe Centi ceiling = Maybe (TaxIncomeBracket Maybe) nextBracket Maybe (TaxIncomeBracket Maybe) -> (TaxIncomeBracket Maybe -> Maybe Centi) -> Maybe Centi forall a b. Maybe a -> (a -> Maybe b) -> Maybe b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= (.line3_threshold) Bool -> Maybe () forall (f :: * -> *). Alternative f => Bool -> f () guard (Centi floor Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool <= Centi i Bool -> Bool -> Bool && (Centi -> Bool) -> Maybe Centi -> Bool forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool all (Centi i Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool <) Maybe Centi ceiling) Maybe Centi income, $sel:line4_overThreshold:TaxIncomeBracket :: Maybe Centi line4_overThreshold = (Centi -> Centi -> Centi) -> Maybe Centi -> Maybe Centi -> Maybe Centi forall a b c. (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 (-) Maybe Centi line2_income Maybe Centi line3_threshold, $sel:line6_timesRate:TaxIncomeBracket :: Maybe Centi line6_timesRate = Rational -> Centi forall a. Fractional a => Rational -> a fromRational (Rational -> Centi) -> Maybe Rational -> Maybe Centi forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Rational -> Rational -> Rational) -> Maybe Rational -> Maybe Rational -> Maybe Rational forall a b c. (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 Rational -> Rational -> Rational forall a. Num a => a -> a -> a (*) (Centi -> Rational forall a. Real a => a -> Rational toRational (Centi -> Rational) -> Maybe Centi -> Maybe Rational forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Maybe Centi line4_overThreshold) Maybe Rational line5_rate, $sel:line8_equalsTax:TaxIncomeBracket :: Maybe Centi line8_equalsTax = (Centi -> Centi -> Centi) -> Maybe Centi -> Maybe Centi -> Maybe Centi forall a b c. (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 Centi -> Centi -> Centi forall a. Num a => a -> a -> a (+) Maybe Centi line6_timesRate Maybe Centi line7_baseTax} fixPage1PartB :: Page1PartB Maybe -> Page1PartB Maybe fixPage1PartB :: Page1PartB Maybe -> Page1PartB Maybe fixPage1PartB = (Page1PartB Maybe -> Page1PartB Maybe) -> Page1PartB Maybe -> Page1PartB Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page1PartB Maybe -> Page1PartB Maybe) -> Page1PartB Maybe -> Page1PartB Maybe) -> (Page1PartB Maybe -> Page1PartB Maybe) -> Page1PartB Maybe -> Page1PartB Maybe forall a b. (a -> b) -> a -> b $ \part :: Page1PartB Maybe part@Page1PartB{Maybe Centi line9_basic :: Maybe Centi line10_age :: Maybe Centi line11_base :: Maybe Centi line12_spouseIncome :: Maybe Centi line13_difference :: Maybe Centi line13_cont :: Maybe Centi line14_base :: Maybe Centi line15_dependentIncome :: Maybe Centi line16_difference :: Maybe Centi line16_cont :: Maybe Centi line17_caregiver :: Maybe Centi line18 :: Maybe Centi line19_cppQpp :: Maybe Centi line20_cppQpp :: Maybe Centi line21_employmentInsurance :: Maybe Centi line22_employmentInsurance :: Maybe Centi line23_adoption :: Maybe Centi line24_sum :: Maybe Centi line24_cont :: Maybe Centi line25 :: Maybe Centi $sel:line9_basic:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line10_age:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line11_base:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line12_spouseIncome:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line13_difference:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line13_cont:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line14_base:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line15_dependentIncome:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line16_difference:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line16_cont:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line17_caregiver:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line18:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line19_cppQpp:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line20_cppQpp:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line21_employmentInsurance:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line22_employmentInsurance:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line23_adoption:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line24_sum:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line24_cont:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line25:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi ..}-> Page1PartB Maybe part{ $sel:line9_basic:Page1PartB :: Maybe Centi line9_basic = Centi -> Maybe Centi forall a. a -> Maybe a Just Centi 11141, $sel:line11_base:Page1PartB :: Maybe Centi line11_base = Centi -> Maybe Centi forall a. a -> Maybe a Just Centi 10406, $sel:line13_difference:Page1PartB :: Maybe Centi line13_difference = (Centi -> Bool) -> Maybe Centi -> Maybe Centi forall (m :: * -> *) a. MonadPlus m => (a -> Bool) -> m a -> m a mfilter (Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool > Centi 0) (Maybe Centi -> Maybe Centi) -> Maybe Centi -> Maybe Centi forall a b. (a -> b) -> a -> b $ (Centi -> Centi -> Centi) -> Maybe Centi -> Maybe Centi -> Maybe Centi forall a b c. (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 (-) Maybe Centi line11_base Maybe Centi line12_spouseIncome, $sel:line13_cont:Page1PartB :: Maybe Centi line13_cont = Maybe Centi line13_difference, $sel:line14_base:Page1PartB :: Maybe Centi line14_base = Centi -> Maybe Centi forall a. a -> Maybe a Just Centi 10406, $sel:line16_difference:Page1PartB :: Maybe Centi line16_difference = (Centi -> Bool) -> Maybe Centi -> Maybe Centi forall (m :: * -> *) a. MonadPlus m => (a -> Bool) -> m a -> m a mfilter (Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool > Centi 0) (Maybe Centi -> Maybe Centi) -> Maybe Centi -> Maybe Centi forall a b. (a -> b) -> a -> b $ (Centi -> Centi -> Centi) -> Maybe Centi -> Maybe Centi -> Maybe Centi forall a b c. (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 (-) Maybe Centi line14_base Maybe Centi line15_dependentIncome, $sel:line16_cont:Page1PartB :: Maybe Centi line16_cont = Maybe Centi line16_difference, $sel:line18:Page1PartB :: Maybe Centi line18 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line9_basic, Maybe Centi line10_age, Maybe Centi line13_cont, Maybe Centi line16_cont, Maybe Centi line17_caregiver], $sel:line24_sum:Page1PartB :: Maybe Centi line24_sum = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line19_cppQpp, Maybe Centi line20_cppQpp, Maybe Centi line21_employmentInsurance, Maybe Centi line22_employmentInsurance, Maybe Centi line23_adoption], $sel:line24_cont:Page1PartB :: Maybe Centi line24_cont = Maybe Centi line24_sum, $sel:line25:Page1PartB :: Maybe Centi line25 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line18, Maybe Centi line24_cont]} fixPage2 :: ON428 Maybe -> Page2 Maybe -> Page2 Maybe fixPage2 :: ON428 Maybe -> Page2 Maybe -> Page2 Maybe fixPage2 ON428 Maybe on428 = (Page2 Maybe -> Page2 Maybe) -> Page2 Maybe -> Page2 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page2 Maybe -> Page2 Maybe) -> Page2 Maybe -> Page2 Maybe) -> (Page2 Maybe -> Page2 Maybe) -> Page2 Maybe -> Page2 Maybe forall a b. (a -> b) -> a -> b $ \Page2{Page2PartC Maybe Page2PartB Maybe partB :: Page2PartB Maybe partC :: Page2PartC Maybe $sel:partB:Page2 :: forall (line :: * -> *). Page2 line -> Page2PartB line $sel:partC:Page2 :: forall (line :: * -> *). Page2 line -> Page2PartC line ..}-> Page2{ $sel:partB:Page2 :: Page2PartB Maybe partB = ON428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe fixPage2PartB ON428 Maybe on428 Page2PartB Maybe partB, $sel:partC:Page2 :: Page2PartC Maybe partC = ON428 Maybe -> Page2PartC Maybe -> Page2PartC Maybe fixPage2PartC ON428 Maybe on428 Page2PartC Maybe partC} fixPage2PartB :: ON428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe fixPage2PartB :: ON428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe fixPage2PartB ON428 Maybe on428 = (Page2PartB Maybe -> Page2PartB Maybe) -> Page2PartB Maybe -> Page2PartB Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page2PartB Maybe -> Page2PartB Maybe) -> Page2PartB Maybe -> Page2PartB Maybe) -> (Page2PartB Maybe -> Page2PartB Maybe) -> Page2PartB Maybe -> Page2PartB Maybe forall a b. (a -> b) -> a -> b $ \part :: Page2PartB Maybe part@Page2PartB{Maybe Rational Maybe Centi Donations Maybe MedicalExpenses Maybe line26 :: Maybe Centi line27_pension :: Maybe Centi line28 :: Maybe Centi line29_disability :: Maybe Centi line30 :: Maybe Centi line31 :: Maybe Centi line32_interest :: Maybe Centi line33_education :: Maybe Centi line34_transferred :: Maybe Centi line35 :: Maybe Centi medicalExpenses :: MedicalExpenses Maybe line42 :: Maybe Centi line43_sum :: Maybe Centi line43_cont :: Maybe Centi line44 :: Maybe Centi line45_rate :: Maybe Rational line46_fraction :: Maybe Centi donations :: Donations Maybe line50 :: Maybe Centi $sel:line26:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line27_pension:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line28:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line29_disability:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line30:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line31:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line32_interest:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line33_education:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line34_transferred:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line35:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:medicalExpenses:Page2PartB :: forall (line :: * -> *). Page2PartB line -> MedicalExpenses line $sel:line42:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line43_sum:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line43_cont:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line44:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:line45_rate:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Rational $sel:line46_fraction:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi $sel:donations:Page2PartB :: forall (line :: * -> *). Page2PartB line -> Donations line $sel:line50:Page2PartB :: forall (line :: * -> *). Page2PartB line -> line Centi ..}-> Page2PartB Maybe part{ $sel:line26:Page2PartB :: Maybe Centi line26 = ON428 Maybe on428.page1.partB.line25, $sel:line28:Page2PartB :: Maybe Centi line28 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line26, Maybe Centi line27_pension], $sel:line31:Page2PartB :: Maybe Centi line31 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line28, Maybe Centi line29_disability, Maybe Centi line30], $sel:line35:Page2PartB :: Maybe Centi line35 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line31, Maybe Centi line32_interest, Maybe Centi line33_education, Maybe Centi line34_transferred], $sel:medicalExpenses:Page2PartB :: MedicalExpenses Maybe medicalExpenses = MedicalExpenses Maybe -> MedicalExpenses Maybe fixMedicalExpenses MedicalExpenses Maybe medicalExpenses, $sel:line43_sum:Page2PartB :: Maybe Centi line43_sum = [Maybe Centi] -> Maybe Centi totalOf [MedicalExpenses Maybe medicalExpenses.line41_difference, Maybe Centi line42], $sel:line43_cont:Page2PartB :: Maybe Centi line43_cont = Maybe Centi line43_sum, $sel:line44:Page2PartB :: Maybe Centi line44 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line35, Maybe Centi line43_cont], $sel:line46_fraction:Page2PartB :: Maybe Centi line46_fraction = Maybe Rational line45_rate Maybe Rational -> Maybe Centi -> Maybe Centi `fractionOf` Maybe Centi line44, $sel:donations:Page2PartB :: Donations Maybe donations = Donations Maybe -> Donations Maybe fixDonations Donations Maybe donations, $sel:line50:Page2PartB :: Maybe Centi line50 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line46_fraction, Donations Maybe donations.line49_cont]} fixPage2PartC :: ON428 Maybe -> Page2PartC Maybe -> Page2PartC Maybe fixPage2PartC :: ON428 Maybe -> Page2PartC Maybe -> Page2PartC Maybe fixPage2PartC ON428 Maybe on428 = (Page2PartC Maybe -> Page2PartC Maybe) -> Page2PartC Maybe -> Page2PartC Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page2PartC Maybe -> Page2PartC Maybe) -> Page2PartC Maybe -> Page2PartC Maybe) -> (Page2PartC Maybe -> Page2PartC Maybe) -> Page2PartC Maybe -> Page2PartC Maybe forall a b. (a -> b) -> a -> b $ \part :: Page2PartC Maybe part@Page2PartC{Maybe Centi line51_tax :: Maybe Centi line52_credits :: Maybe Centi line53 :: Maybe Centi line54 :: Maybe Centi line55 :: Maybe Centi line56 :: Maybe Centi line57 :: Maybe Centi line58 :: Maybe Centi line59_copy :: Maybe Centi line59_product :: Maybe Centi line60_lesser :: Maybe Centi line61 :: Maybe Centi $sel:line51_tax:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi $sel:line52_credits:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi $sel:line53:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi $sel:line54:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi $sel:line55:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi $sel:line56:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi $sel:line57:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi $sel:line58:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi $sel:line59_copy:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi $sel:line59_product:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi $sel:line60_lesser:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi $sel:line61:Page2PartC :: forall (line :: * -> *). Page2PartC line -> line Centi ..}-> Page2PartC Maybe part{ $sel:line51_tax:Page2PartC :: Maybe Centi line51_tax = [Maybe Centi] -> Maybe Centi totalOf [ON428 Maybe on428.page1.partA.column1.line8_equalsTax, ON428 Maybe on428.page1.partA.column2.line8_equalsTax, ON428 Maybe on428.page1.partA.column3.line8_equalsTax, ON428 Maybe on428.page1.partA.column4.line8_equalsTax, ON428 Maybe on428.page1.partA.column5.line8_equalsTax], $sel:line52_credits:Page2PartC :: Maybe Centi line52_credits = ON428 Maybe on428.page2.partB.line50, $sel:line53:Page2PartC :: Maybe Centi line53 = Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line51_tax Maybe Centi line52_credits, $sel:line55:Page2PartC :: Maybe Centi line55 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line53, Maybe Centi line54], $sel:line56:Page2PartC :: Maybe Centi line56 = Maybe Centi line53, $sel:line58:Page2PartC :: Maybe Centi line58 = Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line56 Maybe Centi line57, $sel:line59_product:Page2PartC :: Maybe Centi line59_product = Rational -> Maybe Rational forall a. a -> Maybe a Just Rational 0.3367 Maybe Rational -> Maybe Centi -> Maybe Centi `fractionOf` Maybe Centi line59_copy, $sel:line60_lesser:Page2PartC :: Maybe Centi line60_lesser = Centi -> Centi -> Centi forall a. Ord a => a -> a -> a min (Centi -> Centi -> Centi) -> Maybe Centi -> Maybe (Centi -> Centi) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Maybe Centi line58 Maybe (Centi -> Centi) -> Maybe Centi -> Maybe Centi forall a b. Maybe (a -> b) -> Maybe a -> Maybe b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Maybe Centi line59_product, $sel:line61:Page2PartC :: Maybe Centi line61 = Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line55 Maybe Centi line60_lesser} fixMedicalExpenses :: MedicalExpenses Maybe -> MedicalExpenses Maybe fixMedicalExpenses :: MedicalExpenses Maybe -> MedicalExpenses Maybe fixMedicalExpenses = (MedicalExpenses Maybe -> MedicalExpenses Maybe) -> MedicalExpenses Maybe -> MedicalExpenses Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((MedicalExpenses Maybe -> MedicalExpenses Maybe) -> MedicalExpenses Maybe -> MedicalExpenses Maybe) -> (MedicalExpenses Maybe -> MedicalExpenses Maybe) -> MedicalExpenses Maybe -> MedicalExpenses Maybe forall a b. (a -> b) -> a -> b $ \part :: MedicalExpenses Maybe part@MedicalExpenses{Maybe Rational Maybe Centi line36_expenses :: Maybe Centi line37_income :: Maybe Centi line38_rate :: Maybe Rational line39_fraction :: Maybe Centi line40_lesser :: Maybe Centi line41_difference :: Maybe Centi $sel:line36_expenses:MedicalExpenses :: forall (line :: * -> *). MedicalExpenses line -> line Centi $sel:line37_income:MedicalExpenses :: forall (line :: * -> *). MedicalExpenses line -> line Centi $sel:line38_rate:MedicalExpenses :: forall (line :: * -> *). MedicalExpenses line -> line Rational $sel:line39_fraction:MedicalExpenses :: forall (line :: * -> *). MedicalExpenses line -> line Centi $sel:line40_lesser:MedicalExpenses :: forall (line :: * -> *). MedicalExpenses line -> line Centi $sel:line41_difference:MedicalExpenses :: forall (line :: * -> *). MedicalExpenses line -> line Centi ..} -> MedicalExpenses Maybe part{ $sel:line38_rate:MedicalExpenses :: Maybe Rational line38_rate = Rational -> Maybe Rational forall a. a -> Maybe a Just Rational 0.03, $sel:line39_fraction:MedicalExpenses :: Maybe Centi line39_fraction = Maybe Rational line38_rate Maybe Rational -> Maybe Centi -> Maybe Centi `fractionOf` Maybe Centi line37_income, $sel:line40_lesser:MedicalExpenses :: Maybe Centi line40_lesser = Centi -> Centi -> Centi forall a. Ord a => a -> a -> a min Centi 2522 (Centi -> Centi) -> Maybe Centi -> Maybe Centi forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Maybe Centi line39_fraction, $sel:line41_difference:MedicalExpenses :: Maybe Centi line41_difference = Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line36_expenses Maybe Centi line40_lesser} fixDonations :: Donations Maybe -> Donations Maybe fixDonations :: Donations Maybe -> Donations Maybe fixDonations = (Donations Maybe -> Donations Maybe) -> Donations Maybe -> Donations Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Donations Maybe -> Donations Maybe) -> Donations Maybe -> Donations Maybe) -> (Donations Maybe -> Donations Maybe) -> Donations Maybe -> Donations Maybe forall a b. (a -> b) -> a -> b $ \part :: Donations Maybe part@Donations{Maybe Centi line47_base :: Maybe Centi line47_fraction :: Maybe Centi line48_base :: Maybe Centi line48_fraction :: Maybe Centi line49_sum :: Maybe Centi line49_cont :: Maybe Centi $sel:line47_base:Donations :: forall (line :: * -> *). Donations line -> line Centi $sel:line47_fraction:Donations :: forall (line :: * -> *). Donations line -> line Centi $sel:line48_base:Donations :: forall (line :: * -> *). Donations line -> line Centi $sel:line48_fraction:Donations :: forall (line :: * -> *). Donations line -> line Centi $sel:line49_sum:Donations :: forall (line :: * -> *). Donations line -> line Centi $sel:line49_cont:Donations :: forall (line :: * -> *). Donations line -> line Centi ..} -> Donations Maybe part{ $sel:line47_fraction:Donations :: Maybe Centi line47_fraction = Rational -> Maybe Rational forall a. a -> Maybe a Just Rational 0.0505 Maybe Rational -> Maybe Centi -> Maybe Centi `fractionOf` Maybe Centi line47_base, $sel:line48_fraction:Donations :: Maybe Centi line48_fraction = Rational -> Maybe Rational forall a. a -> Maybe a Just Rational 0.1116 Maybe Rational -> Maybe Centi -> Maybe Centi `fractionOf` Maybe Centi line48_base, $sel:line49_sum:Donations :: Maybe Centi line49_sum = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line47_fraction, Maybe Centi line48_fraction], $sel:line49_cont:Donations :: Maybe Centi line49_cont = Maybe Centi line49_sum} fixPage3 :: ON428 Maybe -> Page3 Maybe -> Page3 Maybe fixPage3 :: ON428 Maybe -> Page3 Maybe -> Page3 Maybe fixPage3 ON428 Maybe on428 = (Page3 Maybe -> Page3 Maybe) -> Page3 Maybe -> Page3 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page3 Maybe -> Page3 Maybe) -> Page3 Maybe -> Page3 Maybe) -> (Page3 Maybe -> Page3 Maybe) -> Page3 Maybe -> Page3 Maybe forall a b. (a -> b) -> a -> b $ \page :: Page3 Maybe page@Page3{Maybe Word Maybe Centi line62 :: Maybe Centi line63 :: Maybe Centi line64 :: Maybe Centi line65 :: Maybe Centi line66_copy :: Maybe Centi line66_surtax :: Maybe Centi line67_copy :: Maybe Centi line67_surtax :: Maybe Centi line68_cont :: Maybe Centi line68_sum :: Maybe Centi line69 :: Maybe Centi line70 :: Maybe Centi line71 :: Maybe Centi line72 :: Maybe Centi line73 :: Maybe Centi line74_basicReduction :: Maybe Centi line75_amount :: Maybe Centi line75_childrenNum :: Maybe Word line76_amount :: Maybe Centi line76_childrenNum :: Maybe Word line77 :: Maybe Centi line78_copy :: Maybe Centi line78_product :: Maybe Centi line79 :: Maybe Centi line80_cont :: Maybe Centi line80_difference :: Maybe Centi line81 :: Maybe Centi line82 :: Maybe Centi line83 :: Maybe Centi $sel:line62:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line63:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line64:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line65:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line66_copy:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line66_surtax:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line67_copy:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line67_surtax:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line68_cont:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line68_sum:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line69:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line70:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line71:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line72:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line73:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line74_basicReduction:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line75_amount:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line75_childrenNum:Page3 :: forall (line :: * -> *). Page3 line -> line Word $sel:line76_amount:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line76_childrenNum:Page3 :: forall (line :: * -> *). Page3 line -> line Word $sel:line77:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line78_copy:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line78_product:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line79:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line80_cont:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line80_difference:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line81:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line82:Page3 :: forall (line :: * -> *). Page3 line -> line Centi $sel:line83:Page3 :: forall (line :: * -> *). Page3 line -> line Centi ..}-> Page3 Maybe page{ $sel:line62:Page3 :: Maybe Centi line62 = ON428 Maybe on428.page2.partC.line61, $sel:line63:Page3 :: Maybe Centi line63 = Maybe Centi line62, $sel:line64:Page3 :: Maybe Centi line64 = ON428 Maybe on428.page2.partC.line54, $sel:line65:Page3 :: Maybe Centi line65 = Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line63 Maybe Centi line64, $sel:line66_copy:Page3 :: Maybe Centi line66_copy = Maybe Centi line65, $sel:line66_surtax:Page3 :: Maybe Centi line66_surtax = Rational -> Maybe Rational forall a. a -> Maybe a Just Rational 0.2 Maybe Rational -> Maybe Centi -> Maybe Centi `fractionOf` Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line66_copy (Centi -> Maybe Centi forall a. a -> Maybe a Just Centi 4991), $sel:line67_copy:Page3 :: Maybe Centi line67_copy = Maybe Centi line65, $sel:line67_surtax:Page3 :: Maybe Centi line67_surtax = Rational -> Maybe Rational forall a. a -> Maybe a Just Rational 0.36 Maybe Rational -> Maybe Centi -> Maybe Centi `fractionOf` Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line67_copy (Centi -> Maybe Centi forall a. a -> Maybe a Just Centi 6387), $sel:line68_sum:Page3 :: Maybe Centi line68_sum = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line66_surtax, Maybe Centi line67_surtax], $sel:line68_cont:Page3 :: Maybe Centi line68_cont = Maybe Centi line68_sum, $sel:line69:Page3 :: Maybe Centi line69 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line62, Maybe Centi line68_cont], $sel:line70:Page3 :: Maybe Centi line70 = ON428 Maybe on428.page2.partC.line57, $sel:line71:Page3 :: Maybe Centi line71 = Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line69 Maybe Centi line70, $sel:line73:Page3 :: Maybe Centi line73 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line71, Maybe Centi line72], $sel:line74_basicReduction:Page3 :: Maybe Centi line74_basicReduction = Centi -> Maybe Centi forall a. a -> Maybe a Just Centi 257, $sel:line75_amount:Page3 :: Maybe Centi line75_amount = ((Centi 475 Centi -> Centi -> Centi forall a. Num a => a -> a -> a *) (Centi -> Centi) -> (Word -> Centi) -> Word -> Centi forall b c a. (b -> c) -> (a -> b) -> a -> c . Word -> Centi forall a b. (Integral a, Num b) => a -> b fromIntegral) (Word -> Centi) -> Maybe Word -> Maybe Centi forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Maybe Word line75_childrenNum, $sel:line76_amount:Page3 :: Maybe Centi line76_amount = ((Centi 475 Centi -> Centi -> Centi forall a. Num a => a -> a -> a *) (Centi -> Centi) -> (Word -> Centi) -> Word -> Centi forall b c a. (b -> c) -> (a -> b) -> a -> c . Word -> Centi forall a b. (Integral a, Num b) => a -> b fromIntegral) (Word -> Centi) -> Maybe Word -> Maybe Centi forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Maybe Word line76_childrenNum, $sel:line77:Page3 :: Maybe Centi line77 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line74_basicReduction, Maybe Centi line75_amount, Maybe Centi line76_amount], $sel:line78_copy:Page3 :: Maybe Centi line78_copy = Maybe Centi line77, $sel:line78_product:Page3 :: Maybe Centi line78_product = (Centi 2 Centi -> Centi -> Centi forall a. Num a => a -> a -> a *) (Centi -> Centi) -> Maybe Centi -> Maybe Centi forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Maybe Centi line78_copy, $sel:line79:Page3 :: Maybe Centi line79 = Maybe Centi line73, $sel:line80_difference:Page3 :: Maybe Centi line80_difference = Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line78_product Maybe Centi line79, $sel:line80_cont:Page3 :: Maybe Centi line80_cont = Maybe Centi line80_difference, $sel:line81:Page3 :: Maybe Centi line81 = Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line73 Maybe Centi line80_cont, $sel:line83:Page3 :: Maybe Centi line83 = Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line81 Maybe Centi line82} fixPage4 :: ON428 Maybe -> Page4 Maybe -> Page4 Maybe fixPage4 :: ON428 Maybe -> Page4 Maybe -> Page4 Maybe fixPage4 ON428 Maybe on428 = (Page4 Maybe -> Page4 Maybe) -> Page4 Maybe -> Page4 Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((Page4 Maybe -> Page4 Maybe) -> Page4 Maybe -> Page4 Maybe) -> (Page4 Maybe -> Page4 Maybe) -> Page4 Maybe -> Page4 Maybe forall a b. (a -> b) -> a -> b $ \page :: Page4 Maybe page@Page4{Maybe Centi HealthPremium Maybe line84 :: Maybe Centi line85_lift :: Maybe Centi line86 :: Maybe Centi line87_foodDonations :: Maybe Centi line87_fraction :: Maybe Centi line88 :: Maybe Centi line89_health :: Maybe Centi line90 :: Maybe Centi healthPremium :: HealthPremium Maybe $sel:line84:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line85_lift:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line86:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line87_foodDonations:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line87_fraction:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line88:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line89_health:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:line90:Page4 :: forall (line :: * -> *). Page4 line -> line Centi $sel:healthPremium:Page4 :: forall (line :: * -> *). Page4 line -> HealthPremium line ..}-> Page4 Maybe page{ $sel:line84:Page4 :: Maybe Centi line84 = ON428 Maybe on428.page3.line83, $sel:line86:Page4 :: Maybe Centi line86 = Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line84 Maybe Centi line85_lift, $sel:line87_fraction:Page4 :: Maybe Centi line87_fraction = Rational -> Maybe Rational forall a. a -> Maybe a Just Rational 0.25 Maybe Rational -> Maybe Centi -> Maybe Centi `fractionOf` Maybe Centi line87_foodDonations, $sel:line88:Page4 :: Maybe Centi line88 = Maybe Centi -> Maybe Centi -> Maybe Centi nonNegativeDifference Maybe Centi line86 Maybe Centi line87_fraction, $sel:line89_health:Page4 :: Maybe Centi line89_health = [Maybe Centi] -> Maybe Centi totalOf [Centi -> Centi -> Centi -> Maybe Centi between Centi 0 Centi 20000 Centi 0, HealthPremium Maybe healthPremium.row1.equalsTax, Centi -> Centi -> Centi -> Maybe Centi between Centi 25000 Centi 36000 Centi 300, HealthPremium Maybe healthPremium.row2.equalsTax, Centi -> Centi -> Centi -> Maybe Centi between Centi 38500 Centi 48000 Centi 450, HealthPremium Maybe healthPremium.row3.equalsTax, Centi -> Centi -> Centi -> Maybe Centi between Centi 48600 Centi 72000 Centi 600, HealthPremium Maybe healthPremium.row4.equalsTax, Centi -> Centi -> Centi -> Maybe Centi between Centi 72600 Centi 200000 Centi 750, HealthPremium Maybe healthPremium.row5.equalsTax, if Centi income Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool > Centi 200600 then Centi -> Maybe Centi forall a. a -> Maybe a Just Centi 900 else Maybe Centi forall a. Maybe a Nothing], $sel:line90:Page4 :: Maybe Centi line90 = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi line88, Maybe Centi line89_health], $sel:healthPremium:Page4 :: HealthPremium Maybe healthPremium = Centi -> HealthPremium Maybe -> HealthPremium Maybe fixHealthPremium Centi income HealthPremium Maybe healthPremium} where income :: Centi income = Maybe Centi -> Centi forall a. Num a => Maybe a -> a forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a sum ON428 Maybe on428.page1.line1 between :: Centi -> Centi -> Centi -> Maybe Centi between Centi floor Centi ceiling Centi tax | Centi income Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool > Centi floor Bool -> Bool -> Bool && Centi income Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool <= Centi ceiling = Centi -> Maybe Centi forall a. a -> Maybe a Just Centi tax | Bool otherwise = Maybe Centi forall a. Maybe a Nothing fixHealthPremium :: Centi -> HealthPremium Maybe -> HealthPremium Maybe fixHealthPremium :: Centi -> HealthPremium Maybe -> HealthPremium Maybe fixHealthPremium Centi income = (HealthPremium Maybe -> HealthPremium Maybe) -> HealthPremium Maybe -> HealthPremium Maybe forall a. Eq a => (a -> a) -> a -> a fixEq ((HealthPremium Maybe -> HealthPremium Maybe) -> HealthPremium Maybe -> HealthPremium Maybe) -> (HealthPremium Maybe -> HealthPremium Maybe) -> HealthPremium Maybe -> HealthPremium Maybe forall a b. (a -> b) -> a -> b $ \HealthPremium{HealthPremiumBracket Maybe row1 :: HealthPremiumBracket Maybe row2 :: HealthPremiumBracket Maybe row3 :: HealthPremiumBracket Maybe row4 :: HealthPremiumBracket Maybe row5 :: HealthPremiumBracket Maybe $sel:row1:HealthPremium :: forall (line :: * -> *). HealthPremium line -> HealthPremiumBracket line $sel:row2:HealthPremium :: forall (line :: * -> *). HealthPremium line -> HealthPremiumBracket line $sel:row3:HealthPremium :: forall (line :: * -> *). HealthPremium line -> HealthPremiumBracket line $sel:row4:HealthPremium :: forall (line :: * -> *). HealthPremium line -> HealthPremiumBracket line $sel:row5:HealthPremium :: forall (line :: * -> *). HealthPremium line -> HealthPremiumBracket line ..}-> HealthPremium{ $sel:row1:HealthPremium :: HealthPremiumBracket Maybe row1 = Centi -> Centi -> Centi -> Rational -> Centi -> HealthPremiumBracket Maybe -> HealthPremiumBracket Maybe fixHealthPremiumBracket Centi income Centi 20000 Centi 25000 Rational 0.06 Centi 0 HealthPremiumBracket Maybe row1, $sel:row2:HealthPremium :: HealthPremiumBracket Maybe row2 = Centi -> Centi -> Centi -> Rational -> Centi -> HealthPremiumBracket Maybe -> HealthPremiumBracket Maybe fixHealthPremiumBracket Centi income Centi 36000 Centi 38500 Rational 0.06 Centi 300 HealthPremiumBracket Maybe row2, $sel:row3:HealthPremium :: HealthPremiumBracket Maybe row3 = Centi -> Centi -> Centi -> Rational -> Centi -> HealthPremiumBracket Maybe -> HealthPremiumBracket Maybe fixHealthPremiumBracket Centi income Centi 48000 Centi 48600 Rational 0.25 Centi 450 HealthPremiumBracket Maybe row3, $sel:row4:HealthPremium :: HealthPremiumBracket Maybe row4 = Centi -> Centi -> Centi -> Rational -> Centi -> HealthPremiumBracket Maybe -> HealthPremiumBracket Maybe fixHealthPremiumBracket Centi income Centi 72000 Centi 72600 Rational 0.25 Centi 600 HealthPremiumBracket Maybe row4, $sel:row5:HealthPremium :: HealthPremiumBracket Maybe row5 = Centi -> Centi -> Centi -> Rational -> Centi -> HealthPremiumBracket Maybe -> HealthPremiumBracket Maybe fixHealthPremiumBracket Centi income Centi 200000 Centi 200600 Rational 0.25 Centi 750 HealthPremiumBracket Maybe row5} fixHealthPremiumBracket :: Centi -> Centi -> Centi -> Rational -> Centi -> HealthPremiumBracket Maybe -> HealthPremiumBracket Maybe fixHealthPremiumBracket :: Centi -> Centi -> Centi -> Rational -> Centi -> HealthPremiumBracket Maybe -> HealthPremiumBracket Maybe fixHealthPremiumBracket Centi income Centi floor Centi ceiling Rational rate Centi base HealthPremiumBracket{Maybe Centi taxableIncome :: Maybe Centi overThreshold :: Maybe Centi timesRate :: Maybe Centi equalsTax :: Maybe Centi $sel:taxableIncome:HealthPremiumBracket :: forall (line :: * -> *). HealthPremiumBracket line -> line Centi $sel:overThreshold:HealthPremiumBracket :: forall (line :: * -> *). HealthPremiumBracket line -> line Centi $sel:timesRate:HealthPremiumBracket :: forall (line :: * -> *). HealthPremiumBracket line -> line Centi $sel:equalsTax:HealthPremiumBracket :: forall (line :: * -> *). HealthPremiumBracket line -> line Centi ..} | Centi income Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool > Centi floor Bool -> Bool -> Bool && Centi income Centi -> Centi -> Bool forall a. Ord a => a -> a -> Bool < Centi ceiling = HealthPremiumBracket{ $sel:taxableIncome:HealthPremiumBracket :: Maybe Centi taxableIncome = Centi -> Maybe Centi forall a. a -> Maybe a Just Centi income, $sel:overThreshold:HealthPremiumBracket :: Maybe Centi overThreshold = Centi -> Maybe Centi forall a. a -> Maybe a Just (Centi -> Maybe Centi) -> Centi -> Maybe Centi forall a b. (a -> b) -> a -> b $ Centi income Centi -> Centi -> Centi forall a. Num a => a -> a -> a - Centi floor, $sel:timesRate:HealthPremiumBracket :: Maybe Centi timesRate = Rational -> Maybe Rational forall a. a -> Maybe a Just Rational rate Maybe Rational -> Maybe Centi -> Maybe Centi `fractionOf` Maybe Centi overThreshold, $sel:equalsTax:HealthPremiumBracket :: Maybe Centi equalsTax = [Maybe Centi] -> Maybe Centi totalOf [Maybe Centi timesRate, Centi -> Maybe Centi forall a. a -> Maybe a Just Centi base]} | Bool otherwise = (forall a. Maybe a) -> HealthPremiumBracket Maybe forall {k} (g :: (k -> *) -> *) (f :: k -> *). Applicative g => (forall (a :: k). f a) -> g f forall (f :: * -> *). (forall a. f a) -> HealthPremiumBracket f Rank2.pure Maybe a forall a. Maybe a Nothing