Skip to content

Instantly share code, notes, and snippets.

@tonymorris
Last active May 29, 2019 09:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tonymorris/ba33511ee32c563162d0f43a9f27cf93 to your computer and use it in GitHub Desktop.
Save tonymorris/ba33511ee32c563162d0f43a9f27cf93 to your computer and use it in GitHub Desktop.
{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE LambdaCase #-}
-- a leap year is a year, divisible by 4, except (those divisible by 100, except those divisible by 400)
-- there is no zero year
-- Distinguish leap years and common years in data types
import Control.Lens
import Data.Semigroup
import Data.Void
data Digit =
D0
| D1
| D2
| D3
| D4
| D5
| D6
| D7
| D8
| D9
deriving (Eq, Ord, Show)
digitsDigit ::
ToDigits Digit
digitsDigit =
noSuffixToDigits pure
newtype Digits =
Digits
[Digit]
deriving (Eq, Ord, Show)
digitsDigits ::
ToDigits Digits
digitsDigits =
noSuffixToDigits (\(Digits x) -> x)
instance Semigroup Digits where
Digits x <> Digits y =
Digits (x <> y)
instance Monoid Digits where
mempty =
Digits mempty
mappend =
(<>)
data Mod4_xx_Positive =
Mod4_xx_Positive_04
| Mod4_xx_Positive_08
| Mod4_xx_Positive_12
| Mod4_xx_Positive_16
| Mod4_xx_Positive_20
| Mod4_xx_Positive_24
| Mod4_xx_Positive_28
| Mod4_xx_Positive_32
| Mod4_xx_Positive_36
| Mod4_xx_Positive_40
| Mod4_xx_Positive_44
| Mod4_xx_Positive_48
| Mod4_xx_Positive_52
| Mod4_xx_Positive_56
| Mod4_xx_Positive_60
| Mod4_xx_Positive_64
| Mod4_xx_Positive_68
| Mod4_xx_Positive_72
| Mod4_xx_Positive_76
| Mod4_xx_Positive_80
| Mod4_xx_Positive_84
| Mod4_xx_Positive_88
| Mod4_xx_Positive_92
| Mod4_xx_Positive_96
deriving (Eq, Ord, Show)
rot1Mod4_xx_Positive ::
Iso' Mod4_xx_Positive Mod4_xx_Positive
rot1Mod4_xx_Positive =
iso
(\case
Mod4_xx_Positive_04 ->
Mod4_xx_Positive_08
Mod4_xx_Positive_08 ->
Mod4_xx_Positive_12
Mod4_xx_Positive_12 ->
Mod4_xx_Positive_16
Mod4_xx_Positive_16 ->
Mod4_xx_Positive_20
Mod4_xx_Positive_20 ->
Mod4_xx_Positive_24
Mod4_xx_Positive_24 ->
Mod4_xx_Positive_28
Mod4_xx_Positive_28 ->
Mod4_xx_Positive_32
Mod4_xx_Positive_32 ->
Mod4_xx_Positive_36
Mod4_xx_Positive_36 ->
Mod4_xx_Positive_40
Mod4_xx_Positive_40 ->
Mod4_xx_Positive_44
Mod4_xx_Positive_44 ->
Mod4_xx_Positive_48
Mod4_xx_Positive_48 ->
Mod4_xx_Positive_52
Mod4_xx_Positive_52 ->
Mod4_xx_Positive_56
Mod4_xx_Positive_56 ->
Mod4_xx_Positive_60
Mod4_xx_Positive_60 ->
Mod4_xx_Positive_64
Mod4_xx_Positive_64 ->
Mod4_xx_Positive_68
Mod4_xx_Positive_68 ->
Mod4_xx_Positive_72
Mod4_xx_Positive_72 ->
Mod4_xx_Positive_76
Mod4_xx_Positive_76 ->
Mod4_xx_Positive_80
Mod4_xx_Positive_80 ->
Mod4_xx_Positive_84
Mod4_xx_Positive_84 ->
Mod4_xx_Positive_88
Mod4_xx_Positive_88 ->
Mod4_xx_Positive_92
Mod4_xx_Positive_92 ->
Mod4_xx_Positive_96
Mod4_xx_Positive_96 ->
Mod4_xx_Positive_04
)
(\case
Mod4_xx_Positive_04 ->
Mod4_xx_Positive_96
Mod4_xx_Positive_08 ->
Mod4_xx_Positive_04
Mod4_xx_Positive_12 ->
Mod4_xx_Positive_08
Mod4_xx_Positive_16 ->
Mod4_xx_Positive_12
Mod4_xx_Positive_20 ->
Mod4_xx_Positive_16
Mod4_xx_Positive_24 ->
Mod4_xx_Positive_20
Mod4_xx_Positive_28 ->
Mod4_xx_Positive_24
Mod4_xx_Positive_32 ->
Mod4_xx_Positive_28
Mod4_xx_Positive_36 ->
Mod4_xx_Positive_32
Mod4_xx_Positive_40 ->
Mod4_xx_Positive_36
Mod4_xx_Positive_44 ->
Mod4_xx_Positive_40
Mod4_xx_Positive_48 ->
Mod4_xx_Positive_44
Mod4_xx_Positive_52 ->
Mod4_xx_Positive_48
Mod4_xx_Positive_56 ->
Mod4_xx_Positive_52
Mod4_xx_Positive_60 ->
Mod4_xx_Positive_56
Mod4_xx_Positive_64 ->
Mod4_xx_Positive_60
Mod4_xx_Positive_68 ->
Mod4_xx_Positive_64
Mod4_xx_Positive_72 ->
Mod4_xx_Positive_68
Mod4_xx_Positive_76 ->
Mod4_xx_Positive_72
Mod4_xx_Positive_80 ->
Mod4_xx_Positive_76
Mod4_xx_Positive_84 ->
Mod4_xx_Positive_80
Mod4_xx_Positive_88 ->
Mod4_xx_Positive_84
Mod4_xx_Positive_92 ->
Mod4_xx_Positive_88
Mod4_xx_Positive_96 ->
Mod4_xx_Positive_92
)
digitsMod4_xx_Positive ::
ToDigits Mod4_xx_Positive
digitsMod4_xx_Positive =
noSuffixToDigits (
\case
Mod4_xx_Positive_04 ->
[D0, D4]
Mod4_xx_Positive_08 ->
[D0, D8]
Mod4_xx_Positive_12 ->
[D1, D2]
Mod4_xx_Positive_16 ->
[D1, D6]
Mod4_xx_Positive_20 ->
[D2, D0]
Mod4_xx_Positive_24 ->
[D2, D4]
Mod4_xx_Positive_28 ->
[D2, D8]
Mod4_xx_Positive_32 ->
[D3, D2]
Mod4_xx_Positive_36 ->
[D3, D6]
Mod4_xx_Positive_40 ->
[D4, D0]
Mod4_xx_Positive_44 ->
[D4, D4]
Mod4_xx_Positive_48 ->
[D4, D8]
Mod4_xx_Positive_52 ->
[D5, D2]
Mod4_xx_Positive_56 ->
[D5, D6]
Mod4_xx_Positive_60 ->
[D6, D0]
Mod4_xx_Positive_64 ->
[D6, D4]
Mod4_xx_Positive_68 ->
[D6, D8]
Mod4_xx_Positive_72 ->
[D7, D2]
Mod4_xx_Positive_76 ->
[D7, D6]
Mod4_xx_Positive_80 ->
[D8, D0]
Mod4_xx_Positive_84 ->
[D8, D4]
Mod4_xx_Positive_88 ->
[D8, D8]
Mod4_xx_Positive_92 ->
[D9, D2]
Mod4_xx_Positive_96 ->
[D9, D6]
)
data Mod4_xx_Natural =
Mod4_xx_Natural_00
| Mod4_xx_Natural_Positive Mod4_xx_Positive
deriving (Eq, Ord, Show)
digitsMod4_xx_Natural ::
ToDigits Mod4_xx_Natural
digitsMod4_xx_Natural =
choose
(\case
Mod4_xx_Natural_00 ->
Left ()
Mod4_xx_Natural_Positive x ->
Right x
)
(noSuffixToDigits (pure [D0, D0]))
digitsMod4_xx_Positive
rot1Mod4_xx_Natural ::
Iso' Mod4_xx_Natural Mod4_xx_Natural
rot1Mod4_xx_Natural =
iso
(\case
Mod4_xx_Natural_00 ->
Mod4_xx_Natural_Positive Mod4_xx_Positive_04
Mod4_xx_Natural_Positive x ->
case x ^. rot1Mod4_xx_Positive of
Mod4_xx_Positive_04 ->
Mod4_xx_Natural_00
y ->
Mod4_xx_Natural_Positive y
)
(\case
Mod4_xx_Natural_00 ->
Mod4_xx_Natural_Positive Mod4_xx_Positive_96
Mod4_xx_Natural_Positive x ->
case rot1Mod4_xx_Positive # x of
Mod4_xx_Positive_96 ->
Mod4_xx_Natural_00
y ->
Mod4_xx_Natural_Positive y
)
data Not_mod4_xx_Nat =
Not_mod4_xx_Nat_01
| Not_mod4_xx_Nat_02
| Not_mod4_xx_Nat_03
| Not_mod4_xx_Nat_05
| Not_mod4_xx_Nat_06
| Not_mod4_xx_Nat_07
| Not_mod4_xx_Nat_09
| Not_mod4_xx_Nat_10
| Not_mod4_xx_Nat_11
| Not_mod4_xx_Nat_13
| Not_mod4_xx_Nat_14
| Not_mod4_xx_Nat_15
| Not_mod4_xx_Nat_17
| Not_mod4_xx_Nat_18
| Not_mod4_xx_Nat_19
| Not_mod4_xx_Nat_21
| Not_mod4_xx_Nat_22
| Not_mod4_xx_Nat_23
| Not_mod4_xx_Nat_25
| Not_mod4_xx_Nat_26
| Not_mod4_xx_Nat_27
| Not_mod4_xx_Nat_29
| Not_mod4_xx_Nat_30
| Not_mod4_xx_Nat_31
| Not_mod4_xx_Nat_33
| Not_mod4_xx_Nat_34
| Not_mod4_xx_Nat_35
| Not_mod4_xx_Nat_37
| Not_mod4_xx_Nat_38
| Not_mod4_xx_Nat_39
| Not_mod4_xx_Nat_41
| Not_mod4_xx_Nat_42
| Not_mod4_xx_Nat_43
| Not_mod4_xx_Nat_45
| Not_mod4_xx_Nat_46
| Not_mod4_xx_Nat_47
| Not_mod4_xx_Nat_49
| Not_mod4_xx_Nat_50
| Not_mod4_xx_Nat_51
| Not_mod4_xx_Nat_53
| Not_mod4_xx_Nat_54
| Not_mod4_xx_Nat_55
| Not_mod4_xx_Nat_57
| Not_mod4_xx_Nat_58
| Not_mod4_xx_Nat_59
| Not_mod4_xx_Nat_61
| Not_mod4_xx_Nat_62
| Not_mod4_xx_Nat_63
| Not_mod4_xx_Nat_65
| Not_mod4_xx_Nat_66
| Not_mod4_xx_Nat_67
| Not_mod4_xx_Nat_69
| Not_mod4_xx_Nat_70
| Not_mod4_xx_Nat_71
| Not_mod4_xx_Nat_73
| Not_mod4_xx_Nat_74
| Not_mod4_xx_Nat_75
| Not_mod4_xx_Nat_77
| Not_mod4_xx_Nat_78
| Not_mod4_xx_Nat_79
| Not_mod4_xx_Nat_81
| Not_mod4_xx_Nat_82
| Not_mod4_xx_Nat_83
| Not_mod4_xx_Nat_85
| Not_mod4_xx_Nat_86
| Not_mod4_xx_Nat_87
| Not_mod4_xx_Nat_89
| Not_mod4_xx_Nat_90
| Not_mod4_xx_Nat_91
| Not_mod4_xx_Nat_93
| Not_mod4_xx_Nat_94
| Not_mod4_xx_Nat_95
| Not_mod4_xx_Nat_97
| Not_mod4_xx_Nat_98
| Not_mod4_xx_Nat_99
deriving (Eq, Ord, Show)
digitsNot_mod4_xx_Nat ::
ToDigits Not_mod4_xx_Nat
digitsNot_mod4_xx_Nat =
noSuffixToDigits (\case
Not_mod4_xx_Nat_01 ->
[D0, D1]
Not_mod4_xx_Nat_02 ->
[D0, D2]
Not_mod4_xx_Nat_03 ->
[D0, D3]
Not_mod4_xx_Nat_05 ->
[D0, D5]
Not_mod4_xx_Nat_06 ->
[D0, D6]
Not_mod4_xx_Nat_07 ->
[D0, D7]
Not_mod4_xx_Nat_09 ->
[D0, D9]
Not_mod4_xx_Nat_10 ->
[D1, D0]
Not_mod4_xx_Nat_11 ->
[D1, D1]
Not_mod4_xx_Nat_13 ->
[D1, D3]
Not_mod4_xx_Nat_14 ->
[D1, D4]
Not_mod4_xx_Nat_15 ->
[D1, D5]
Not_mod4_xx_Nat_17 ->
[D1, D7]
Not_mod4_xx_Nat_18 ->
[D1, D8]
Not_mod4_xx_Nat_19 ->
[D1, D9]
Not_mod4_xx_Nat_21 ->
[D2, D1]
Not_mod4_xx_Nat_22 ->
[D2, D2]
Not_mod4_xx_Nat_23 ->
[D2, D3]
Not_mod4_xx_Nat_25 ->
[D2, D5]
Not_mod4_xx_Nat_26 ->
[D2, D6]
Not_mod4_xx_Nat_27 ->
[D2, D7]
Not_mod4_xx_Nat_29 ->
[D2, D9]
Not_mod4_xx_Nat_30 ->
[D3, D0]
Not_mod4_xx_Nat_31 ->
[D3, D1]
Not_mod4_xx_Nat_33 ->
[D3, D3]
Not_mod4_xx_Nat_34 ->
[D3, D4]
Not_mod4_xx_Nat_35 ->
[D3, D5]
Not_mod4_xx_Nat_37 ->
[D3, D7]
Not_mod4_xx_Nat_38 ->
[D3, D8]
Not_mod4_xx_Nat_39 ->
[D3, D9]
Not_mod4_xx_Nat_41 ->
[D4, D1]
Not_mod4_xx_Nat_42 ->
[D4, D2]
Not_mod4_xx_Nat_43 ->
[D4, D3]
Not_mod4_xx_Nat_45 ->
[D4, D5]
Not_mod4_xx_Nat_46 ->
[D4, D6]
Not_mod4_xx_Nat_47 ->
[D4, D7]
Not_mod4_xx_Nat_49 ->
[D4, D9]
Not_mod4_xx_Nat_50 ->
[D5, D0]
Not_mod4_xx_Nat_51 ->
[D5, D1]
Not_mod4_xx_Nat_53 ->
[D5, D3]
Not_mod4_xx_Nat_54 ->
[D5, D4]
Not_mod4_xx_Nat_55 ->
[D5, D5]
Not_mod4_xx_Nat_57 ->
[D5, D7]
Not_mod4_xx_Nat_58 ->
[D5, D8]
Not_mod4_xx_Nat_59 ->
[D5, D9]
Not_mod4_xx_Nat_61 ->
[D6, D1]
Not_mod4_xx_Nat_62 ->
[D6, D2]
Not_mod4_xx_Nat_63 ->
[D6, D3]
Not_mod4_xx_Nat_65 ->
[D6, D5]
Not_mod4_xx_Nat_66 ->
[D6, D6]
Not_mod4_xx_Nat_67 ->
[D6, D7]
Not_mod4_xx_Nat_69 ->
[D6, D9]
Not_mod4_xx_Nat_70 ->
[D7, D0]
Not_mod4_xx_Nat_71 ->
[D7, D1]
Not_mod4_xx_Nat_73 ->
[D7, D3]
Not_mod4_xx_Nat_74 ->
[D7, D4]
Not_mod4_xx_Nat_75 ->
[D7, D5]
Not_mod4_xx_Nat_77 ->
[D7, D7]
Not_mod4_xx_Nat_78 ->
[D7, D8]
Not_mod4_xx_Nat_79 ->
[D7, D9]
Not_mod4_xx_Nat_81 ->
[D8, D1]
Not_mod4_xx_Nat_82 ->
[D8, D2]
Not_mod4_xx_Nat_83 ->
[D8, D3]
Not_mod4_xx_Nat_85 ->
[D8, D5]
Not_mod4_xx_Nat_86 ->
[D8, D6]
Not_mod4_xx_Nat_87 ->
[D8, D7]
Not_mod4_xx_Nat_89 ->
[D8, D9]
Not_mod4_xx_Nat_90 ->
[D9, D0]
Not_mod4_xx_Nat_91 ->
[D9, D1]
Not_mod4_xx_Nat_93 ->
[D9, D3]
Not_mod4_xx_Nat_94 ->
[D9, D4]
Not_mod4_xx_Nat_95 ->
[D9, D5]
Not_mod4_xx_Nat_97 ->
[D9, D7]
Not_mod4_xx_Nat_98 ->
[D9, D8]
Not_mod4_xx_Nat_99 ->
[D9, D9]
)
rot1Not_mod4_xx_Nat ::
Iso' Not_mod4_xx_Nat Not_mod4_xx_Nat
rot1Not_mod4_xx_Nat =
iso
(\case
Not_mod4_xx_Nat_01 ->
Not_mod4_xx_Nat_02
Not_mod4_xx_Nat_02 ->
Not_mod4_xx_Nat_03
Not_mod4_xx_Nat_03 ->
Not_mod4_xx_Nat_05
Not_mod4_xx_Nat_05 ->
Not_mod4_xx_Nat_06
Not_mod4_xx_Nat_06 ->
Not_mod4_xx_Nat_07
Not_mod4_xx_Nat_07 ->
Not_mod4_xx_Nat_09
Not_mod4_xx_Nat_09 ->
Not_mod4_xx_Nat_10
Not_mod4_xx_Nat_10 ->
Not_mod4_xx_Nat_11
Not_mod4_xx_Nat_11 ->
Not_mod4_xx_Nat_13
Not_mod4_xx_Nat_13 ->
Not_mod4_xx_Nat_14
Not_mod4_xx_Nat_14 ->
Not_mod4_xx_Nat_15
Not_mod4_xx_Nat_15 ->
Not_mod4_xx_Nat_17
Not_mod4_xx_Nat_17 ->
Not_mod4_xx_Nat_18
Not_mod4_xx_Nat_18 ->
Not_mod4_xx_Nat_19
Not_mod4_xx_Nat_19 ->
Not_mod4_xx_Nat_21
Not_mod4_xx_Nat_21 ->
Not_mod4_xx_Nat_22
Not_mod4_xx_Nat_22 ->
Not_mod4_xx_Nat_23
Not_mod4_xx_Nat_23 ->
Not_mod4_xx_Nat_25
Not_mod4_xx_Nat_25 ->
Not_mod4_xx_Nat_26
Not_mod4_xx_Nat_26 ->
Not_mod4_xx_Nat_27
Not_mod4_xx_Nat_27 ->
Not_mod4_xx_Nat_29
Not_mod4_xx_Nat_29 ->
Not_mod4_xx_Nat_30
Not_mod4_xx_Nat_30 ->
Not_mod4_xx_Nat_31
Not_mod4_xx_Nat_31 ->
Not_mod4_xx_Nat_33
Not_mod4_xx_Nat_33 ->
Not_mod4_xx_Nat_34
Not_mod4_xx_Nat_34 ->
Not_mod4_xx_Nat_35
Not_mod4_xx_Nat_35 ->
Not_mod4_xx_Nat_37
Not_mod4_xx_Nat_37 ->
Not_mod4_xx_Nat_38
Not_mod4_xx_Nat_38 ->
Not_mod4_xx_Nat_39
Not_mod4_xx_Nat_39 ->
Not_mod4_xx_Nat_41
Not_mod4_xx_Nat_41 ->
Not_mod4_xx_Nat_42
Not_mod4_xx_Nat_42 ->
Not_mod4_xx_Nat_43
Not_mod4_xx_Nat_43 ->
Not_mod4_xx_Nat_45
Not_mod4_xx_Nat_45 ->
Not_mod4_xx_Nat_46
Not_mod4_xx_Nat_46 ->
Not_mod4_xx_Nat_47
Not_mod4_xx_Nat_47 ->
Not_mod4_xx_Nat_49
Not_mod4_xx_Nat_49 ->
Not_mod4_xx_Nat_50
Not_mod4_xx_Nat_50 ->
Not_mod4_xx_Nat_51
Not_mod4_xx_Nat_51 ->
Not_mod4_xx_Nat_53
Not_mod4_xx_Nat_53 ->
Not_mod4_xx_Nat_54
Not_mod4_xx_Nat_54 ->
Not_mod4_xx_Nat_55
Not_mod4_xx_Nat_55 ->
Not_mod4_xx_Nat_57
Not_mod4_xx_Nat_57 ->
Not_mod4_xx_Nat_58
Not_mod4_xx_Nat_58 ->
Not_mod4_xx_Nat_59
Not_mod4_xx_Nat_59 ->
Not_mod4_xx_Nat_61
Not_mod4_xx_Nat_61 ->
Not_mod4_xx_Nat_62
Not_mod4_xx_Nat_62 ->
Not_mod4_xx_Nat_63
Not_mod4_xx_Nat_63 ->
Not_mod4_xx_Nat_65
Not_mod4_xx_Nat_65 ->
Not_mod4_xx_Nat_66
Not_mod4_xx_Nat_66 ->
Not_mod4_xx_Nat_67
Not_mod4_xx_Nat_67 ->
Not_mod4_xx_Nat_69
Not_mod4_xx_Nat_69 ->
Not_mod4_xx_Nat_70
Not_mod4_xx_Nat_70 ->
Not_mod4_xx_Nat_71
Not_mod4_xx_Nat_71 ->
Not_mod4_xx_Nat_73
Not_mod4_xx_Nat_73 ->
Not_mod4_xx_Nat_74
Not_mod4_xx_Nat_74 ->
Not_mod4_xx_Nat_75
Not_mod4_xx_Nat_75 ->
Not_mod4_xx_Nat_77
Not_mod4_xx_Nat_77 ->
Not_mod4_xx_Nat_78
Not_mod4_xx_Nat_78 ->
Not_mod4_xx_Nat_79
Not_mod4_xx_Nat_79 ->
Not_mod4_xx_Nat_81
Not_mod4_xx_Nat_81 ->
Not_mod4_xx_Nat_82
Not_mod4_xx_Nat_82 ->
Not_mod4_xx_Nat_83
Not_mod4_xx_Nat_83 ->
Not_mod4_xx_Nat_85
Not_mod4_xx_Nat_85 ->
Not_mod4_xx_Nat_86
Not_mod4_xx_Nat_86 ->
Not_mod4_xx_Nat_87
Not_mod4_xx_Nat_87 ->
Not_mod4_xx_Nat_89
Not_mod4_xx_Nat_89 ->
Not_mod4_xx_Nat_90
Not_mod4_xx_Nat_90 ->
Not_mod4_xx_Nat_91
Not_mod4_xx_Nat_91 ->
Not_mod4_xx_Nat_93
Not_mod4_xx_Nat_93 ->
Not_mod4_xx_Nat_94
Not_mod4_xx_Nat_94 ->
Not_mod4_xx_Nat_95
Not_mod4_xx_Nat_95 ->
Not_mod4_xx_Nat_97
Not_mod4_xx_Nat_97 ->
Not_mod4_xx_Nat_98
Not_mod4_xx_Nat_98 ->
Not_mod4_xx_Nat_99
Not_mod4_xx_Nat_99 ->
Not_mod4_xx_Nat_01
)
(\case
Not_mod4_xx_Nat_01 ->
Not_mod4_xx_Nat_99
Not_mod4_xx_Nat_02 ->
Not_mod4_xx_Nat_01
Not_mod4_xx_Nat_03 ->
Not_mod4_xx_Nat_02
Not_mod4_xx_Nat_05 ->
Not_mod4_xx_Nat_03
Not_mod4_xx_Nat_06 ->
Not_mod4_xx_Nat_05
Not_mod4_xx_Nat_07 ->
Not_mod4_xx_Nat_06
Not_mod4_xx_Nat_09 ->
Not_mod4_xx_Nat_17
Not_mod4_xx_Nat_10 ->
Not_mod4_xx_Nat_09
Not_mod4_xx_Nat_11 ->
Not_mod4_xx_Nat_10
Not_mod4_xx_Nat_13 ->
Not_mod4_xx_Nat_11
Not_mod4_xx_Nat_14 ->
Not_mod4_xx_Nat_13
Not_mod4_xx_Nat_15 ->
Not_mod4_xx_Nat_14
Not_mod4_xx_Nat_17 ->
Not_mod4_xx_Nat_15
Not_mod4_xx_Nat_18 ->
Not_mod4_xx_Nat_17
Not_mod4_xx_Nat_19 ->
Not_mod4_xx_Nat_18
Not_mod4_xx_Nat_21 ->
Not_mod4_xx_Nat_19
Not_mod4_xx_Nat_22 ->
Not_mod4_xx_Nat_21
Not_mod4_xx_Nat_23 ->
Not_mod4_xx_Nat_22
Not_mod4_xx_Nat_25 ->
Not_mod4_xx_Nat_23
Not_mod4_xx_Nat_26 ->
Not_mod4_xx_Nat_25
Not_mod4_xx_Nat_27 ->
Not_mod4_xx_Nat_26
Not_mod4_xx_Nat_29 ->
Not_mod4_xx_Nat_27
Not_mod4_xx_Nat_30 ->
Not_mod4_xx_Nat_29
Not_mod4_xx_Nat_31 ->
Not_mod4_xx_Nat_30
Not_mod4_xx_Nat_33 ->
Not_mod4_xx_Nat_31
Not_mod4_xx_Nat_34 ->
Not_mod4_xx_Nat_33
Not_mod4_xx_Nat_35 ->
Not_mod4_xx_Nat_34
Not_mod4_xx_Nat_37 ->
Not_mod4_xx_Nat_35
Not_mod4_xx_Nat_38 ->
Not_mod4_xx_Nat_37
Not_mod4_xx_Nat_39 ->
Not_mod4_xx_Nat_38
Not_mod4_xx_Nat_41 ->
Not_mod4_xx_Nat_39
Not_mod4_xx_Nat_42 ->
Not_mod4_xx_Nat_41
Not_mod4_xx_Nat_43 ->
Not_mod4_xx_Nat_42
Not_mod4_xx_Nat_45 ->
Not_mod4_xx_Nat_43
Not_mod4_xx_Nat_46 ->
Not_mod4_xx_Nat_45
Not_mod4_xx_Nat_47 ->
Not_mod4_xx_Nat_46
Not_mod4_xx_Nat_49 ->
Not_mod4_xx_Nat_47
Not_mod4_xx_Nat_50 ->
Not_mod4_xx_Nat_49
Not_mod4_xx_Nat_51 ->
Not_mod4_xx_Nat_50
Not_mod4_xx_Nat_53 ->
Not_mod4_xx_Nat_51
Not_mod4_xx_Nat_54 ->
Not_mod4_xx_Nat_53
Not_mod4_xx_Nat_55 ->
Not_mod4_xx_Nat_54
Not_mod4_xx_Nat_57 ->
Not_mod4_xx_Nat_55
Not_mod4_xx_Nat_58 ->
Not_mod4_xx_Nat_57
Not_mod4_xx_Nat_59 ->
Not_mod4_xx_Nat_58
Not_mod4_xx_Nat_61 ->
Not_mod4_xx_Nat_59
Not_mod4_xx_Nat_62 ->
Not_mod4_xx_Nat_61
Not_mod4_xx_Nat_63 ->
Not_mod4_xx_Nat_62
Not_mod4_xx_Nat_65 ->
Not_mod4_xx_Nat_63
Not_mod4_xx_Nat_66 ->
Not_mod4_xx_Nat_65
Not_mod4_xx_Nat_67 ->
Not_mod4_xx_Nat_66
Not_mod4_xx_Nat_69 ->
Not_mod4_xx_Nat_67
Not_mod4_xx_Nat_70 ->
Not_mod4_xx_Nat_69
Not_mod4_xx_Nat_71 ->
Not_mod4_xx_Nat_70
Not_mod4_xx_Nat_73 ->
Not_mod4_xx_Nat_71
Not_mod4_xx_Nat_74 ->
Not_mod4_xx_Nat_73
Not_mod4_xx_Nat_75 ->
Not_mod4_xx_Nat_74
Not_mod4_xx_Nat_77 ->
Not_mod4_xx_Nat_75
Not_mod4_xx_Nat_78 ->
Not_mod4_xx_Nat_77
Not_mod4_xx_Nat_79 ->
Not_mod4_xx_Nat_78
Not_mod4_xx_Nat_81 ->
Not_mod4_xx_Nat_79
Not_mod4_xx_Nat_82 ->
Not_mod4_xx_Nat_81
Not_mod4_xx_Nat_83 ->
Not_mod4_xx_Nat_82
Not_mod4_xx_Nat_85 ->
Not_mod4_xx_Nat_83
Not_mod4_xx_Nat_86 ->
Not_mod4_xx_Nat_85
Not_mod4_xx_Nat_87 ->
Not_mod4_xx_Nat_86
Not_mod4_xx_Nat_89 ->
Not_mod4_xx_Nat_87
Not_mod4_xx_Nat_90 ->
Not_mod4_xx_Nat_89
Not_mod4_xx_Nat_91 ->
Not_mod4_xx_Nat_90
Not_mod4_xx_Nat_93 ->
Not_mod4_xx_Nat_91
Not_mod4_xx_Nat_94 ->
Not_mod4_xx_Nat_93
Not_mod4_xx_Nat_95 ->
Not_mod4_xx_Nat_94
Not_mod4_xx_Nat_97 ->
Not_mod4_xx_Nat_95
Not_mod4_xx_Nat_98 ->
Not_mod4_xx_Nat_97
Not_mod4_xx_Nat_99 ->
Not_mod4_xx_Nat_98
)
data Not_mod4_xx_Positive =
Not_mod4_xx_Positive_00
| Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat
deriving (Eq, Ord, Show)
digitsNot_mod4_xx_Positive ::
ToDigits Not_mod4_xx_Positive
digitsNot_mod4_xx_Positive =
choose
(\d ->
case d of
Not_mod4_xx_Positive_00 ->
Left ()
Not_mod4_xx_Positive_Natural x ->
Right x
)
(noSuffixToDigits (pure [D0, D0]))
digitsNot_mod4_xx_Nat
rot1Not_mod4_xx_Positive ::
Iso' Not_mod4_xx_Positive Not_mod4_xx_Positive
rot1Not_mod4_xx_Positive =
iso
(\case
Not_mod4_xx_Positive_00 ->
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_01
Not_mod4_xx_Positive_Natural x ->
case rot1Not_mod4_xx_Nat # x of
Not_mod4_xx_Nat_01 ->
Not_mod4_xx_Positive_00
y ->
Not_mod4_xx_Positive_Natural y
)
(\case
Not_mod4_xx_Positive_00 ->
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_99
Not_mod4_xx_Positive_Natural x ->
case x ^. rot1Not_mod4_xx_Nat of
Not_mod4_xx_Nat_99 ->
Not_mod4_xx_Positive_00
y ->
Not_mod4_xx_Positive_Natural y
)
data LeapYear_Natural_Suffix =
LeapYear_Natural_Suffix_xx
Not_mod4_xx_Positive
Mod4_xx_Positive
| LeapYear_Natural_Suffix_00
Mod4_xx_Positive
Mod4_xx_Natural
deriving (Eq, Ord, Show)
rot1LeapYear_Natural_Suffix ::
Iso' LeapYear_Natural_Suffix LeapYear_Natural_Suffix
rot1LeapYear_Natural_Suffix =
iso
(\case
LeapYear_Natural_Suffix_xx xx yy ->
case yy ^. rot1Mod4_xx_Positive of
Mod4_xx_Positive_04 ->
case xx of
Not_mod4_xx_Positive_00 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_01)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_01 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_02)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_02 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_03)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_03 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_04
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_05 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_06)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_06 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_07)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_07 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_08
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_09 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_10)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_10 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_11)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_11 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_12
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_13 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_14)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_14 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_15)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_15 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_16
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_17 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_18)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_18 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_19)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_19 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_20
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_21 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_22)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_22 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_23)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_23 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_24
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_25 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_26)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_26 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_27)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_27 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_28
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_29 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_30)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_30 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_31)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_31 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_32
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_33 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_34)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_34 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_35)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_35 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_36
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_37 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_38)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_38 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_39)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_39 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_40
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_41 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_42)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_42 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_43)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_43 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_44
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_45 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_46)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_46 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_47)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_47 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_48
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_49 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_50)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_50 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_51)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_51 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_52
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_53 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_54)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_54 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_55)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_55 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_56
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_57 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_58)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_58 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_59)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_59 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_60
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_61 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_62)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_62 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_63)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_63 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_64
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_65 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_66)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_66 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_67)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_67 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_68
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_69 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_70)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_70 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_71)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_71 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_72
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_73 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_74)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_74 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_75)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_75 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_76
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_77 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_78)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_78 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_79)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_79 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_80
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_81 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_82)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_82 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_83)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_83 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_84
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_85 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_86)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_86 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_87)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_87 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_88
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_89 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_90)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_90 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_91)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_91 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_92
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_93 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_94)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_94 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_95)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_95 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_96
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_97 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_98)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_98 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_99)
Mod4_xx_Positive_04
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_99 ->
LeapYear_Natural_Suffix_xx
Not_mod4_xx_Positive_00
Mod4_xx_Positive_04
yy' ->
LeapYear_Natural_Suffix_xx xx yy'
LeapYear_Natural_Suffix_00 xx yy ->
case yy ^. rot1Mod4_xx_Natural of
Mod4_xx_Natural_00 ->
case xx of
Mod4_xx_Positive_04 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_05)
Mod4_xx_Positive_04
Mod4_xx_Positive_08 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_09)
Mod4_xx_Positive_04
Mod4_xx_Positive_12 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_13)
Mod4_xx_Positive_04
Mod4_xx_Positive_16 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_17)
Mod4_xx_Positive_04
Mod4_xx_Positive_20 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_21)
Mod4_xx_Positive_04
Mod4_xx_Positive_24 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_25)
Mod4_xx_Positive_04
Mod4_xx_Positive_28 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_29)
Mod4_xx_Positive_04
Mod4_xx_Positive_32 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_33)
Mod4_xx_Positive_04
Mod4_xx_Positive_36 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_37)
Mod4_xx_Positive_04
Mod4_xx_Positive_40 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_41)
Mod4_xx_Positive_04
Mod4_xx_Positive_44 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_45)
Mod4_xx_Positive_04
Mod4_xx_Positive_48 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_49)
Mod4_xx_Positive_04
Mod4_xx_Positive_52 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_53)
Mod4_xx_Positive_04
Mod4_xx_Positive_56 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_57)
Mod4_xx_Positive_04
Mod4_xx_Positive_60 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_61)
Mod4_xx_Positive_04
Mod4_xx_Positive_64 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_65)
Mod4_xx_Positive_04
Mod4_xx_Positive_68 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_69)
Mod4_xx_Positive_04
Mod4_xx_Positive_72 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_73)
Mod4_xx_Positive_04
Mod4_xx_Positive_76 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_77)
Mod4_xx_Positive_04
Mod4_xx_Positive_80 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_81)
Mod4_xx_Positive_04
Mod4_xx_Positive_84 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_85)
Mod4_xx_Positive_04
Mod4_xx_Positive_88 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_89)
Mod4_xx_Positive_04
Mod4_xx_Positive_92 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_93)
Mod4_xx_Positive_04
Mod4_xx_Positive_96 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_97)
Mod4_xx_Positive_04
yy' ->
LeapYear_Natural_Suffix_00 xx yy'
)
(\case
LeapYear_Natural_Suffix_xx xx yy ->
case rot1Mod4_xx_Positive # yy of
Mod4_xx_Positive_96 ->
case xx of
Not_mod4_xx_Positive_00 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_99)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_01 ->
LeapYear_Natural_Suffix_xx
Not_mod4_xx_Positive_00
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_02 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_01)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_03 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_02)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_05 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_04
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_06 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_05)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_07 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_06)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_09 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_08
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_10 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_09)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_11 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_10)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_13 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_12
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_14 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_13)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_15 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_14)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_17 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_16
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_18 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_17)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_19 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_18)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_21 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_20
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_22 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_21)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_23 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_22)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_25 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_24
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_26 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_25)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_27 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_26)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_29 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_28
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_30 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_29)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_31 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_30)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_33 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_32
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_34 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_33)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_35 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_34)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_37 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_36
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_38 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_37)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_39 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_38)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_41 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_40
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_42 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_41)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_43 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_42)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_45 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_44
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_46 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_45)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_47 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_46)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_49 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_48
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_50 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_49)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_51 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_50)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_53 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_52
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_54 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_53)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_55 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_54)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_57 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_56
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_58 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_57)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_59 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_58)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_61 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_60
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_62 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_61)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_63 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_62)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_65 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_64
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_66 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_65)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_67 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_66)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_69 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_68
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_70 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_69)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_71 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_70)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_73 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_72
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_74 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_73)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_75 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_74)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_77 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_76
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_78 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_77)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_79 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_78)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_81 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_80
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_82 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_81)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_83 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_82)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_85 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_84
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_86 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_85)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_87 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_86)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_89 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_88
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_90 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_89)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_91 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_90)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_93 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_92
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_94 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_93)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_95 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_94)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_97 ->
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_96
Mod4_xx_Natural_00
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_98 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_97)
Mod4_xx_Positive_96
Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_99 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_98)
Mod4_xx_Positive_96
yy' ->
LeapYear_Natural_Suffix_xx xx yy'
LeapYear_Natural_Suffix_00 xx yy ->
case rot1Mod4_xx_Natural # yy of
Mod4_xx_Natural_Positive Mod4_xx_Positive_96 ->
case xx of
Mod4_xx_Positive_04 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_03)
Mod4_xx_Positive_96
Mod4_xx_Positive_08 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_07)
Mod4_xx_Positive_96
Mod4_xx_Positive_12 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_11)
Mod4_xx_Positive_96
Mod4_xx_Positive_16 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_15)
Mod4_xx_Positive_96
Mod4_xx_Positive_20 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_19)
Mod4_xx_Positive_96
Mod4_xx_Positive_24 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_23)
Mod4_xx_Positive_96
Mod4_xx_Positive_28 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_27)
Mod4_xx_Positive_96
Mod4_xx_Positive_32 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_31)
Mod4_xx_Positive_96
Mod4_xx_Positive_36 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_35)
Mod4_xx_Positive_96
Mod4_xx_Positive_40 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_39)
Mod4_xx_Positive_96
Mod4_xx_Positive_44 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_43)
Mod4_xx_Positive_96
Mod4_xx_Positive_48 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_47)
Mod4_xx_Positive_96
Mod4_xx_Positive_52 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_51)
Mod4_xx_Positive_96
Mod4_xx_Positive_56 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_55)
Mod4_xx_Positive_96
Mod4_xx_Positive_60 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_59)
Mod4_xx_Positive_96
Mod4_xx_Positive_64 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_63)
Mod4_xx_Positive_96
Mod4_xx_Positive_68 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_67)
Mod4_xx_Positive_96
Mod4_xx_Positive_72 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_71)
Mod4_xx_Positive_96
Mod4_xx_Positive_76 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_75)
Mod4_xx_Positive_96
Mod4_xx_Positive_80 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_79)
Mod4_xx_Positive_96
Mod4_xx_Positive_84 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_83)
Mod4_xx_Positive_96
Mod4_xx_Positive_88 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_87)
Mod4_xx_Positive_96
Mod4_xx_Positive_92 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_91)
Mod4_xx_Positive_96
Mod4_xx_Positive_96 ->
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_95)
Mod4_xx_Positive_96
yy' ->
LeapYear_Natural_Suffix_00 xx yy'
)
digitsLeapYear_Natural_Suffix ::
ToDigits LeapYear_Natural_Suffix
digitsLeapYear_Natural_Suffix =
choose
(\case
LeapYear_Natural_Suffix_xx x y ->
Left (x, y)
LeapYear_Natural_Suffix_00 x y ->
Right (x, y)
)
(
divide
id
digitsNot_mod4_xx_Positive
digitsMod4_xx_Positive
)
(
divide
id
digitsMod4_xx_Positive
digitsMod4_xx_Natural
)
-- |
--
-- >>> LeapYear_Natural mempty (LeapYear_Natural_Suffix_00 Mod4_xx_Natural_00 Mod4_xx_Positive_44)
data LeapYear_Natural =
LeapYear_Natural
Digits
LeapYear_Natural_Suffix
deriving (Eq, Ord, Show)
digitsLeapYear_Natural ::
ToDigits LeapYear_Natural
digitsLeapYear_Natural =
divide
(\(LeapYear_Natural d s) -> (d, s))
digitsDigits
digitsLeapYear_Natural_Suffix
data Commonyear_Natural_Suffix =
Commonyear_Natural_Suffix_xx
Digit
Digit
Not_mod4_xx_Nat
| Commonyear_Natural_Suffix_00
Not_mod4_xx_Nat -- 00
deriving (Eq, Ord, Show)
digitsCommonyear_Natural_Suffix ::
ToDigits Commonyear_Natural_Suffix
digitsCommonyear_Natural_Suffix =
choose
(\case
Commonyear_Natural_Suffix_xx d1 d2 x ->
Left ((d1, d2), x)
Commonyear_Natural_Suffix_00 x ->
Right x
)
(
divide
id
(
divide
id
digitsDigit
digitsDigit
)
digitsNot_mod4_xx_Nat
)
(
divide
(\x -> (x, ()))
digitsNot_mod4_xx_Nat
(noSuffixToDigits (pure [D0, D0]))
)
data Commonyear_Natural =
Commonyear_Natural
Digits
Commonyear_Natural_Suffix
deriving (Eq, Ord, Show)
digitsCommonyear_Natural ::
ToDigits Commonyear_Natural
digitsCommonyear_Natural =
divide
(\(Commonyear_Natural d x) -> (d, x))
digitsDigits
digitsCommonyear_Natural_Suffix
data LeapYear =
LeapYear_CE LeapYear_Natural
| LeapYear_BCE LeapYear_Natural
deriving (Eq, Ord, Show)
digitsLeapYear ::
ToDigits LeapYear
digitsLeapYear =
choose
(\case
LeapYear_CE n ->
Left n
LeapYear_BCE n ->
Right n
)
(modSuffix (pure "CE") digitsLeapYear_Natural)
(modSuffix (pure "BCE") digitsLeapYear_Natural)
data CommonYear =
CommonYear_CE Commonyear_Natural
| CommonYear_BCE Commonyear_Natural
deriving (Eq, Ord, Show)
digitsCommonYear ::
ToDigits CommonYear
digitsCommonYear =
choose
(\case
CommonYear_CE n ->
Left n
CommonYear_BCE n ->
Right n
)
(modSuffix (pure "CE") digitsCommonyear_Natural)
(modSuffix (pure "BCE") digitsCommonyear_Natural)
data Year =
LeapYear_ LeapYear
| CommonYear_ CommonYear
deriving (Eq, Ord, Show)
digitsYear ::
ToDigits Year
digitsYear =
choose
(\case
LeapYear_ z ->
Left z
CommonYear_ z ->
Right z
)
digitsLeapYear
digitsCommonYear
----
newtype ToDigits a =
ToDigits (a -> ([Digit], String))
unToDigits ::
ToDigits a
-> a
-> ([Digit], String)
unToDigits (ToDigits x) =
x
constToDigits ::
([Digit], String)
-> ToDigits a
constToDigits =
ToDigits . pure
noSuffixToDigits ::
(a -> [Digit])
-> ToDigits a
noSuffixToDigits k =
ToDigits (\a -> (k a, ""))
modSuffix ::
(String -> String)
-> ToDigits a
-> ToDigits a
modSuffix k (ToDigits x) =
ToDigits (\a -> let (d, s) = x a in (d, k s))
printToDigits ::
ToDigits a
-> a
-> String
printToDigits (ToDigits x) a =
let (d, s) = x a
in (dropWhile (== D0) d >>= \case
D0 ->
"0"
D1 ->
"1"
D2 ->
"2"
D3 ->
"3"
D4 ->
"4"
D5 ->
"5"
D6 ->
"6"
D7 ->
"7"
D8 ->
"8"
D9 ->
"9"
) ++ s
instance Semigroup (ToDigits a) where
ToDigits x <> ToDigits y =
ToDigits (\a -> x a <> y a)
instance Monoid (ToDigits a) where
mappend =
(<>)
mempty =
ToDigits (pure mempty)
instance Contravariant ToDigits where
contramap f (ToDigits g) =
ToDigits (g . f)
instance Divisible ToDigits where
divide f (ToDigits x) (ToDigits y) =
ToDigits (\a ->
let (p, q) = f a
in x p <> y q)
conquer =
ToDigits (pure mempty)
instance Decidable ToDigits where
lose f =
ToDigits (absurd . f)
choose f (ToDigits g) (ToDigits h) =
ToDigits (either g h . f)
----
class Contravariant f => Divisible f where
divide ::
(a -> (b, c))
-> f b
-> f c
-> f a
conquer ::
f a
class Divisible f => Decidable f where
lose ::
(a -> Void)
-> f a
choose ::
(a -> Either b c)
-> f b
-> f c
-> f a
----
test1CE ::
Year
test1CE =
CommonYear_ .
CommonYear_CE $
Commonyear_Natural
mempty
(
Commonyear_Natural_Suffix_xx
D0
D0
Not_mod4_xx_Nat_01
)
test4CE ::
Year
test4CE =
LeapYear_ .
LeapYear_CE $
LeapYear_Natural
mempty
(
LeapYear_Natural_Suffix_xx
Not_mod4_xx_Positive_00
Mod4_xx_Positive_04
)
test1999CE ::
Year
test1999CE =
CommonYear_ .
CommonYear_CE $
Commonyear_Natural
mempty
(
Commonyear_Natural_Suffix_xx
D1
D9
Not_mod4_xx_Nat_99
)
test2000CE ::
Year
test2000CE =
LeapYear_ .
LeapYear_CE $
LeapYear_Natural
mempty
(
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_20
Mod4_xx_Natural_00
)
test2001CE ::
Year
test2001CE =
CommonYear_ .
CommonYear_CE $
Commonyear_Natural
mempty
(
Commonyear_Natural_Suffix_xx
D2
D0
Not_mod4_xx_Nat_01
)
test2004CE ::
Year
test2004CE =
LeapYear_ .
LeapYear_CE $
LeapYear_Natural
mempty
(
LeapYear_Natural_Suffix_00
Mod4_xx_Positive_20
(Mod4_xx_Natural_Positive Mod4_xx_Positive_04)
)
test2300604CE ::
Year
test2300604CE =
LeapYear_ .
LeapYear_CE $
LeapYear_Natural
(
Digits
[
D0
, D2
, D3
, D0
]
)
(
LeapYear_Natural_Suffix_xx
(Not_mod4_xx_Positive_Natural Not_mod4_xx_Nat_06)
Mod4_xx_Positive_04
)
test139700BCE ::
Year
test139700BCE =
CommonYear_ .
CommonYear_BCE $
Commonyear_Natural
(
Digits
[
D1
, D3
]
)
(
Commonyear_Natural_Suffix_00
Not_mod4_xx_Nat_97
)
main ::
IO ()
main =
let tests =
[
test1CE
, test4CE
, test1999CE
, test2000CE
, test2001CE
, test2004CE
, test2300604CE
, test139700BCE
]
in mapM_ (putStrLn . printToDigits digitsYear) tests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment