{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedRecordDot #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module Tax.Canada.Province.ON.ON428.Fix (ON428, fixON428) where import Control.Applicative (liftA2) import Control.Monad (guard, mfilter) import Data.Fixed (Centi) import Rank2 qualified import Tax.Canada.Province.ON.ON428.Types import Tax.Canada.Shared (fixBaseCredit, fixMedicalExpenses, fixSubCalculation, fixTaxIncomeBracket, BaseCredit(cont), MedicalExpenses (difference), SubCalculation (result), TaxIncomeBracket (equalsTax)) 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} 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 SubCalculation Maybe BaseCredit Maybe line9_basic :: Maybe Centi line10_age :: Maybe Centi spouseAmount :: BaseCredit Maybe dependantAmount :: BaseCredit Maybe 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 :: SubCalculation Maybe line25 :: Maybe Centi $sel:line9_basic:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:line10_age:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi $sel:spouseAmount:Page1PartB :: forall (line :: * -> *). Page1PartB line -> BaseCredit line $sel:dependantAmount:Page1PartB :: forall (line :: * -> *). Page1PartB line -> BaseCredit line $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 -> SubCalculation line $sel:line25:Page1PartB :: forall (line :: * -> *). Page1PartB line -> line Centi ..}-> Page1PartB Maybe part{ line9_basic = Just 11865, spouseAmount = fixBaseCredit spouseAmount, dependantAmount = fixBaseCredit dependantAmount, line18 = totalOf [line9_basic, line10_age, spouseAmount.cont, dependantAmount.cont, line17_caregiver], line24_sum = fixSubCalculation $ totalOf [line19_cppQpp, line20_cppQpp, line21_employmentInsurance, line22_employmentInsurance, line23_adoption], line25 = totalOf [line18, line24_sum.result]} 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 SubCalculation Maybe MedicalExpenses Maybe Donations 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 :: SubCalculation Maybe 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 -> SubCalculation line $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{ line26 = on428.page1.partB.line25, line28 = totalOf [line26, line27_pension], line31 = totalOf [line28, line29_disability, line30], line35 = totalOf [line31, line32_interest, line33_education, line34_transferred], medicalExpenses = fixMedicalExpenses 2685 medicalExpenses, line43_sum = fixSubCalculation $ totalOf [medicalExpenses.difference, line42], line44 = totalOf [line35, line43_sum.result], line46_fraction = line45_rate `fractionOf` line44, donations = fixDonations donations, line50 = totalOf [line46_fraction, donations.line49_sum.result]} 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{ line51_tax = totalOf [on428.page1.partA.column1.equalsTax, on428.page1.partA.column2.equalsTax, on428.page1.partA.column3.equalsTax, on428.page1.partA.column4.equalsTax, on428.page1.partA.column5.equalsTax], line52_credits = on428.page2.partB.line50, line53 = nonNegativeDifference line51_tax line52_credits, line55 = totalOf [line53, line54], line56 = line53, line58 = nonNegativeDifference line56 line57, line59_product = Just 0.3367 `fractionOf` line59_copy, line60_lesser = min <$> line58 <*> line59_product, line61 = nonNegativeDifference line55 line60_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 SubCalculation Maybe line47_base :: Maybe Centi line47_fraction :: Maybe Centi line48_base :: Maybe Centi line48_fraction :: Maybe Centi line49_sum :: SubCalculation Maybe $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 -> SubCalculation line ..} -> Donations Maybe part{ line47_fraction = Just 0.0505 `fractionOf` line47_base, line48_fraction = Just 0.1116 `fractionOf` line48_base, line49_sum = fixSubCalculation $ totalOf [line47_fraction, line48_fraction]} 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 SubCalculation Maybe 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_sum :: SubCalculation Maybe 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_difference :: SubCalculation Maybe 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_sum:Page3 :: forall (line :: * -> *). Page3 line -> SubCalculation line $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_difference:Page3 :: forall (line :: * -> *). Page3 line -> SubCalculation line $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{ line62 = on428.page2.partC.line61, line63 = line62, line64 = on428.page2.partC.line54, line65 = nonNegativeDifference line63 line64, line66_copy = line65, line66_surtax = Just 0.2 `fractionOf` nonNegativeDifference line66_copy (Just 5315), line67_copy = line65, line67_surtax = Just 0.36 `fractionOf` nonNegativeDifference line67_copy (Just 6802), line68_sum = fixSubCalculation $ totalOf [line66_surtax, line67_surtax], line69 = totalOf [line62, line68_sum.result], line70 = on428.page2.partC.line57, line71 = nonNegativeDifference line69 line70, line73 = totalOf [line71, line72], line75_amount = ((506 *) . fromIntegral) <$> line75_childrenNum, line76_amount = ((506 *) . fromIntegral) <$> line76_childrenNum, line77 = totalOf [line74_basicReduction, line75_amount, line76_amount], line78_copy = line77, line78_product = (2 *) <$> line78_copy, line79 = line73, line80_difference = fixSubCalculation $ nonNegativeDifference line78_product line79, line81 = nonNegativeDifference line73 line80_difference.result, line83 = nonNegativeDifference line81 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{ line84 = on428.page3.line83, line86 = nonNegativeDifference line84 line85_lift, line87_fraction = Just 0.25 `fractionOf` line87_foodDonations, line88 = nonNegativeDifference line86 line87_fraction, line89_health = totalOf [between 0 20000 0, healthPremium.row1.equalsTax, between 25000 36000 300, healthPremium.row2.equalsTax, between 38500 48000 450, healthPremium.row3.equalsTax, between 48600 72000 600, healthPremium.row4.equalsTax, between 72600 200000 750, healthPremium.row5.equalsTax, if income > 200600 then Just 900 else Nothing], line90 = totalOf [line88, line89_health], healthPremium = fixHealthPremium income 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 forall a. Num a => [Maybe a] -> Maybe a 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