{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE ConstraintKinds #-} module Data.Char.Alpha where import Control.Applicative((<|>)) import Control.Category(id, (.)) import Control.Lens(Prism', Iso', prism', iso, from, involuted, (^.), ( # )) import Data.Char(Char) import Data.Eq(Eq) import Data.Functor((<$), (<$>)) import Data.List(lookup) import Data.List.NonEmpty(NonEmpty((:|))) import Data.Maybe(Maybe(Just, Nothing), fromMaybe) import Data.Ord(Ord) import GHC.Generics(Generic) import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators(()) import Prelude(Show) data A_a = A_a deriving (Eq, Ord, Show, Generic) class Ca x where _a' :: Prism' x () _a :: x _a = _a' # () instance Ca () where _a' = id instance Ca A_a where _a' = prism' (\() -> A_a) (\A_a -> Just ()) instance Ca Char where _a' = prism' (\() -> 'a') (\c -> case c of 'a' -> Just () _ -> Nothing) parse_a :: (Ca x, CharParsing p) => p x parse_a = _a <$ char 'a' "a" data B_b = B_b deriving (Eq, Ord, Show, Generic) class Cb x where _b' :: Prism' x () _b :: x _b = _b' # () instance Cb () where _b' = id instance Cb B_b where _b' = prism' (\() -> B_b) (\B_b -> Just ()) instance Cb Char where _b' = prism' (\() -> 'b') (\c -> case c of 'b' -> Just () _ -> Nothing) parse_b :: (Cb x, CharParsing p) => p x parse_b = _b <$ char 'b' "b" data C_c = C_c deriving (Eq, Ord, Show, Generic) class Cc x where _c' :: Prism' x () _c :: x _c = _c' # () instance Cc () where _c' = id instance Cc C_c where _c' = prism' (\() -> C_c) (\C_c -> Just ()) instance Cc Char where _c' = prism' (\() -> 'c') (\c -> case c of 'c' -> Just () _ -> Nothing) parse_c :: (Cc x, CharParsing p) => p x parse_c = _c <$ char 'c' "c" data D_d = D_d deriving (Eq, Ord, Show, Generic) class Cd x where _d' :: Prism' x () _d :: x _d = _d' # () instance Cd () where _d' = id instance Cd D_d where _d' = prism' (\() -> D_d) (\D_d -> Just ()) instance Cd Char where _d' = prism' (\() -> 'd') (\c -> case c of 'd' -> Just () _ -> Nothing) parse_d :: (Cd x, CharParsing p) => p x parse_d = _d <$ char 'd' "d" data E_e = E_e deriving (Eq, Ord, Show, Generic) class Ce x where _e' :: Prism' x () _e :: x _e = _e' # () instance Ce () where _e' = id instance Ce E_e where _e' = prism' (\() -> E_e) (\E_e -> Just ()) instance Ce Char where _e' = prism' (\() -> 'e') (\c -> case c of 'e' -> Just () _ -> Nothing) parse_e :: (Ce x, CharParsing p) => p x parse_e = _e <$ char 'e' "e" data F_f = F_f deriving (Eq, Ord, Show, Generic) class Cf x where _f' :: Prism' x () _f :: x _f = _f' # () instance Cf () where _f' = id instance Cf F_f where _f' = prism' (\() -> F_f) (\F_f -> Just ()) instance Cf Char where _f' = prism' (\() -> 'f') (\c -> case c of 'f' -> Just () _ -> Nothing) parse_f :: (Cf x, CharParsing p) => p x parse_f = _f <$ char 'f' "f" data G_g = G_g deriving (Eq, Ord, Show, Generic) class Cg x where _g' :: Prism' x () _g :: x _g = _g' # () instance Cg () where _g' = id instance Cg G_g where _g' = prism' (\() -> G_g) (\G_g -> Just ()) instance Cg Char where _g' = prism' (\() -> 'g') (\c -> case c of 'g' -> Just () _ -> Nothing) parse_g :: (Cg x, CharParsing p) => p x parse_g = _g <$ char 'g' "g" data H_h = H_h deriving (Eq, Ord, Show, Generic) class Ch x where _h' :: Prism' x () _h :: x _h = _h' # () instance Ch () where _h' = id instance Ch H_h where _h' = prism' (\() -> H_h) (\H_h -> Just ()) instance Ch Char where _h' = prism' (\() -> 'h') (\c -> case c of 'h' -> Just () _ -> Nothing) parse_h :: (Ch x, CharParsing p) => p x parse_h = _h <$ char 'h' "h" data I_i = I_i deriving (Eq, Ord, Show, Generic) class Ci x where _i' :: Prism' x () _i :: x _i = _i' # () instance Ci () where _i' = id instance Ci I_i where _i' = prism' (\() -> I_i) (\I_i -> Just ()) instance Ci Char where _i' = prism' (\() -> 'i') (\c -> case c of 'i' -> Just () _ -> Nothing) parse_i :: (Ci x, CharParsing p) => p x parse_i = _i <$ char 'i' "i" data J_j = J_j deriving (Eq, Ord, Show, Generic) class Cj x where _j' :: Prism' x () _j :: x _j = _j' # () instance Cj () where _j' = id instance Cj J_j where _j' = prism' (\() -> J_j) (\J_j -> Just ()) instance Cj Char where _j' = prism' (\() -> 'j') (\c -> case c of 'j' -> Just () _ -> Nothing) parse_j :: (Cj x, CharParsing p) => p x parse_j = _j <$ char 'j' "j" data K_k = K_k deriving (Eq, Ord, Show, Generic) class Ck x where _k' :: Prism' x () _k :: x _k = _k' # () instance Ck () where _k' = id instance Ck K_k where _k' = prism' (\() -> K_k) (\K_k -> Just ()) instance Ck Char where _k' = prism' (\() -> 'k') (\c -> case c of 'k' -> Just () _ -> Nothing) parse_k :: (Ck x, CharParsing p) => p x parse_k = _k <$ char 'k' "k" data L_l = L_l deriving (Eq, Ord, Show, Generic) class Cl x where _l' :: Prism' x () _l :: x _l = _l' # () instance Cl () where _l' = id instance Cl L_l where _l' = prism' (\() -> L_l) (\L_l -> Just ()) instance Cl Char where _l' = prism' (\() -> 'l') (\c -> case c of 'l' -> Just () _ -> Nothing) parse_l :: (Cl x, CharParsing p) => p x parse_l = _l <$ char 'l' "l" data M_m = M_m deriving (Eq, Ord, Show, Generic) class Cm x where _m' :: Prism' x () _m :: x _m = _m' # () instance Cm () where _m' = id instance Cm M_m where _m' = prism' (\() -> M_m) (\M_m -> Just ()) instance Cm Char where _m' = prism' (\() -> 'm') (\c -> case c of 'm' -> Just () _ -> Nothing) parse_m :: (Cm x, CharParsing p) => p x parse_m = _m <$ char 'm' "m" data N_n = N_n deriving (Eq, Ord, Show, Generic) class Cn x where _n' :: Prism' x () _n :: x _n = _n' # () instance Cn () where _n' = id instance Cn N_n where _n' = prism' (\() -> N_n) (\N_n -> Just ()) instance Cn Char where _n' = prism' (\() -> 'n') (\c -> case c of 'n' -> Just () _ -> Nothing) parse_n :: (Cn x, CharParsing p) => p x parse_n = _n <$ char 'n' "n" data O_o = O_o deriving (Eq, Ord, Show, Generic) class Co x where _o' :: Prism' x () _o :: x _o = _o' # () instance Co () where _o' = id instance Co O_o where _o' = prism' (\() -> O_o) (\O_o -> Just ()) instance Co Char where _o' = prism' (\() -> 'o') (\c -> case c of 'o' -> Just () _ -> Nothing) parse_o :: (Co x, CharParsing p) => p x parse_o = _o <$ char 'o' "o" data P_p = P_p deriving (Eq, Ord, Show, Generic) class Cp x where _p' :: Prism' x () _p :: x _p = _p' # () instance Cp () where _p' = id instance Cp P_p where _p' = prism' (\() -> P_p) (\P_p -> Just ()) instance Cp Char where _p' = prism' (\() -> 'p') (\c -> case c of 'p' -> Just () _ -> Nothing) parse_p :: (Cp x, CharParsing p) => p x parse_p = _p <$ char 'p' "p" data Q_q = Q_q deriving (Eq, Ord, Show, Generic) class Cq x where _q' :: Prism' x () _q :: x _q = _q' # () instance Cq () where _q' = id instance Cq Q_q where _q' = prism' (\() -> Q_q) (\Q_q -> Just ()) instance Cq Char where _q' = prism' (\() -> 'q') (\c -> case c of 'q' -> Just () _ -> Nothing) parse_q :: (Cq x, CharParsing p) => p x parse_q = _q <$ char 'q' "q" data R_r = R_r deriving (Eq, Ord, Show, Generic) class Cr x where _r' :: Prism' x () _r :: x _r = _r' # () instance Cr () where _r' = id instance Cr R_r where _r' = prism' (\() -> R_r) (\R_r -> Just ()) instance Cr Char where _r' = prism' (\() -> 'r') (\c -> case c of 'r' -> Just () _ -> Nothing) parse_r :: (Cr x, CharParsing p) => p x parse_r = _r <$ char 'r' "r" data S_s = S_s deriving (Eq, Ord, Show, Generic) class Cs x where _s' :: Prism' x () _s :: x _s = _s' # () instance Cs () where _s' = id instance Cs S_s where _s' = prism' (\() -> S_s) (\S_s -> Just ()) instance Cs Char where _s' = prism' (\() -> 's') (\c -> case c of 's' -> Just () _ -> Nothing) parse_s :: (Cs x, CharParsing p) => p x parse_s = _s <$ char 's' "s" data T_t = T_t deriving (Eq, Ord, Show, Generic) class Ct x where _t' :: Prism' x () _t :: x _t = _t' # () instance Ct () where _t' = id instance Ct T_t where _t' = prism' (\() -> T_t) (\T_t -> Just ()) instance Ct Char where _t' = prism' (\() -> 't') (\c -> case c of 't' -> Just () _ -> Nothing) parse_t :: (Ct x, CharParsing p) => p x parse_t = _t <$ char 't' "t" data U_u = U_u deriving (Eq, Ord, Show, Generic) class Cu x where _u' :: Prism' x () _u :: x _u = _u' # () instance Cu () where _u' = id instance Cu U_u where _u' = prism' (\() -> U_u) (\U_u -> Just ()) instance Cu Char where _u' = prism' (\() -> 'u') (\c -> case c of 'u' -> Just () _ -> Nothing) parse_u :: (Cu x, CharParsing p) => p x parse_u = _u <$ char 'u' "u" data V_v = V_v deriving (Eq, Ord, Show, Generic) class Cv x where _v' :: Prism' x () _v :: x _v = _v' # () instance Cv () where _v' = id instance Cv V_v where _v' = prism' (\() -> V_v) (\V_v -> Just ()) instance Cv Char where _v' = prism' (\() -> 'v') (\c -> case c of 'v' -> Just () _ -> Nothing) parse_v :: (Cv x, CharParsing p) => p x parse_v = _v <$ char 'v' "v" data W_w = W_w deriving (Eq, Ord, Show, Generic) class Cw x where _w' :: Prism' x () _w :: x _w = _w' # () instance Cw () where _w' = id instance Cw W_w where _w' = prism' (\() -> W_w) (\W_w -> Just ()) instance Cw Char where _w' = prism' (\() -> 'w') (\c -> case c of 'w' -> Just () _ -> Nothing) parse_w :: (Cw x, CharParsing p) => p x parse_w = _w <$ char 'w' "w" data X_x = X_x deriving (Eq, Ord, Show, Generic) class Cx x where _x' :: Prism' x () _x :: x _x = _x' # () instance Cx () where _x' = id instance Cx X_x where _x' = prism' (\() -> X_x) (\X_x -> Just ()) instance Cx Char where _x' = prism' (\() -> 'x') (\c -> case c of 'x' -> Just () _ -> Nothing) parse_x :: (Cx x, CharParsing p) => p x parse_x = _x <$ char 'x' "x" data Y_y = Y_y deriving (Eq, Ord, Show, Generic) class Cy x where _y' :: Prism' x () _y :: x _y = _y' # () instance Cy () where _y' = id instance Cy Y_y where _y' = prism' (\() -> Y_y) (\Y_y -> Just ()) instance Cy Char where _y' = prism' (\() -> 'y') (\c -> case c of 'y' -> Just () _ -> Nothing) parse_y :: (Cy x, CharParsing p) => p x parse_y = _y <$ char 'y' "y" data Z_z = Z_z deriving (Eq, Ord, Show, Generic) class Cz x where _z' :: Prism' x () _z :: x _z = _z' # () instance Cz () where _z' = id instance Cz Z_z where _z' = prism' (\() -> Z_z) (\Z_z -> Just ()) instance Cz Char where _z' = prism' (\() -> 'z') (\c -> case c of 'z' -> Just () _ -> Nothing) parse_z :: (Cz x, CharParsing p) => p x parse_z = _z <$ char 'z' "z" data A_A = A_A deriving (Eq, Ord, Show, Generic) class CA x where _A' :: Prism' x () _A :: x _A = _A' # () instance CA () where _A' = id instance CA A_A where _A' = prism' (\() -> A_A) (\A_A -> Just ()) instance CA Char where _A' = prism' (\() -> 'A') (\c -> case c of 'A' -> Just () _ -> Nothing) parse_A :: (CA x, CharParsing p) => p x parse_A = _A <$ char 'A' "A" data B_B = B_B deriving (Eq, Ord, Show, Generic) class CB x where _B' :: Prism' x () _B :: x _B = _B' # () instance CB () where _B' = id instance CB B_B where _B' = prism' (\() -> B_B) (\B_B -> Just ()) instance CB Char where _B' = prism' (\() -> 'B') (\c -> case c of 'B' -> Just () _ -> Nothing) parse_B :: (CB x, CharParsing p) => p x parse_B = _B <$ char 'B' "B" data C_C = C_C deriving (Eq, Ord, Show, Generic) class CC x where _C' :: Prism' x () _C :: x _C = _C' # () instance CC () where _C' = id instance CC C_C where _C' = prism' (\() -> C_C) (\C_C -> Just ()) instance CC Char where _C' = prism' (\() -> 'C') (\c -> case c of 'C' -> Just () _ -> Nothing) parse_C :: (CC x, CharParsing p) => p x parse_C = _C <$ char 'C' "C" data D_D = D_D deriving (Eq, Ord, Show, Generic) class CD x where _D' :: Prism' x () _D :: x _D = _D' # () instance CD () where _D' = id instance CD D_D where _D' = prism' (\() -> D_D) (\D_D -> Just ()) instance CD Char where _D' = prism' (\() -> 'D') (\c -> case c of 'D' -> Just () _ -> Nothing) parse_D :: (CD x, CharParsing p) => p x parse_D = _D <$ char 'D' "D" data E_E = E_E deriving (Eq, Ord, Show, Generic) class CE x where _E' :: Prism' x () _E :: x _E = _E' # () instance CE () where _E' = id instance CE E_E where _E' = prism' (\() -> E_E) (\E_E -> Just ()) instance CE Char where _E' = prism' (\() -> 'E') (\c -> case c of 'E' -> Just () _ -> Nothing) parse_E :: (CE x, CharParsing p) => p x parse_E = _E <$ char 'E' "E" data F_F = F_F deriving (Eq, Ord, Show, Generic) class CF x where _F' :: Prism' x () _F :: x _F = _F' # () instance CF () where _F' = id instance CF F_F where _F' = prism' (\() -> F_F) (\F_F -> Just ()) instance CF Char where _F' = prism' (\() -> 'F') (\c -> case c of 'F' -> Just () _ -> Nothing) parse_F :: (CF x, CharParsing p) => p x parse_F = _F <$ char 'F' "F" data G_G = G_G deriving (Eq, Ord, Show, Generic) class CG x where _G' :: Prism' x () _G :: x _G = _G' # () instance CG () where _G' = id instance CG G_G where _G' = prism' (\() -> G_G) (\G_G -> Just ()) instance CG Char where _G' = prism' (\() -> 'G') (\c -> case c of 'G' -> Just () _ -> Nothing) parse_G :: (CG x, CharParsing p) => p x parse_G = _G <$ char 'G' "G" data H_H = H_H deriving (Eq, Ord, Show, Generic) class CH x where _H' :: Prism' x () _H :: x _H = _H' # () instance CH () where _H' = id instance CH H_H where _H' = prism' (\() -> H_H) (\H_H -> Just ()) instance CH Char where _H' = prism' (\() -> 'H') (\c -> case c of 'H' -> Just () _ -> Nothing) parse_H :: (CH x, CharParsing p) => p x parse_H = _H <$ char 'H' "H" data I_I = I_I deriving (Eq, Ord, Show, Generic) class CI x where _I' :: Prism' x () _I :: x _I = _I' # () instance CI () where _I' = id instance CI I_I where _I' = prism' (\() -> I_I) (\I_I -> Just ()) instance CI Char where _I' = prism' (\() -> 'I') (\c -> case c of 'I' -> Just () _ -> Nothing) parse_I :: (CI x, CharParsing p) => p x parse_I = _I <$ char 'I' "I" data J_J = J_J deriving (Eq, Ord, Show, Generic) class CJ x where _J' :: Prism' x () _J :: x _J = _J' # () instance CJ () where _J' = id instance CJ J_J where _J' = prism' (\() -> J_J) (\J_J -> Just ()) instance CJ Char where _J' = prism' (\() -> 'J') (\c -> case c of 'J' -> Just () _ -> Nothing) parse_J :: (CJ x, CharParsing p) => p x parse_J = _J <$ char 'J' "J" data K_K = K_K deriving (Eq, Ord, Show, Generic) class CK x where _K' :: Prism' x () _K :: x _K = _K' # () instance CK () where _K' = id instance CK K_K where _K' = prism' (\() -> K_K) (\K_K -> Just ()) instance CK Char where _K' = prism' (\() -> 'K') (\c -> case c of 'K' -> Just () _ -> Nothing) parse_K :: (CK x, CharParsing p) => p x parse_K = _K <$ char 'K' "K" data L_L = L_L deriving (Eq, Ord, Show, Generic) class CL x where _L' :: Prism' x () _L :: x _L = _L' # () instance CL () where _L' = id instance CL L_L where _L' = prism' (\() -> L_L) (\L_L -> Just ()) instance CL Char where _L' = prism' (\() -> 'L') (\c -> case c of 'L' -> Just () _ -> Nothing) parse_L :: (CL x, CharParsing p) => p x parse_L = _L <$ char 'L' "L" data M_M = M_M deriving (Eq, Ord, Show, Generic) class CM x where _M' :: Prism' x () _M :: x _M = _M' # () instance CM () where _M' = id instance CM M_M where _M' = prism' (\() -> M_M) (\M_M -> Just ()) instance CM Char where _M' = prism' (\() -> 'M') (\c -> case c of 'M' -> Just () _ -> Nothing) parse_M :: (CM x, CharParsing p) => p x parse_M = _M <$ char 'M' "M" data N_N = N_N deriving (Eq, Ord, Show, Generic) class CN x where _N' :: Prism' x () _N :: x _N = _N' # () instance CN () where _N' = id instance CN N_N where _N' = prism' (\() -> N_N) (\N_N -> Just ()) instance CN Char where _N' = prism' (\() -> 'N') (\c -> case c of 'N' -> Just () _ -> Nothing) parse_N :: (CN x, CharParsing p) => p x parse_N = _N <$ char 'N' "N" data O_O = O_O deriving (Eq, Ord, Show, Generic) class CO x where _O' :: Prism' x () _O :: x _O = _O' # () instance CO () where _O' = id instance CO O_O where _O' = prism' (\() -> O_O) (\O_O -> Just ()) instance CO Char where _O' = prism' (\() -> 'O') (\c -> case c of 'O' -> Just () _ -> Nothing) parse_O :: (CO x, CharParsing p) => p x parse_O = _O <$ char 'O' "O" data P_P = P_P deriving (Eq, Ord, Show, Generic) class CP x where _P' :: Prism' x () _P :: x _P = _P' # () instance CP () where _P' = id instance CP P_P where _P' = prism' (\() -> P_P) (\P_P -> Just ()) instance CP Char where _P' = prism' (\() -> 'P') (\c -> case c of 'P' -> Just () _ -> Nothing) parse_P :: (CP x, CharParsing p) => p x parse_P = _P <$ char 'P' "P" data Q_Q = Q_Q deriving (Eq, Ord, Show, Generic) class CQ x where _Q' :: Prism' x () _Q :: x _Q = _Q' # () instance CQ () where _Q' = id instance CQ Q_Q where _Q' = prism' (\() -> Q_Q) (\Q_Q -> Just ()) instance CQ Char where _Q' = prism' (\() -> 'Q') (\c -> case c of 'Q' -> Just () _ -> Nothing) parse_Q :: (CQ x, CharParsing p) => p x parse_Q = _Q <$ char 'Q' "Q" data R_R = R_R deriving (Eq, Ord, Show, Generic) class CR x where _R' :: Prism' x () _R :: x _R = _R' # () instance CR () where _R' = id instance CR R_R where _R' = prism' (\() -> R_R) (\R_R -> Just ()) instance CR Char where _R' = prism' (\() -> 'R') (\c -> case c of 'R' -> Just () _ -> Nothing) parse_R :: (CR x, CharParsing p) => p x parse_R = _R <$ char 'R' "R" data S_S = S_S deriving (Eq, Ord, Show, Generic) class CS x where _S' :: Prism' x () _S :: x _S = _S' # () instance CS () where _S' = id instance CS S_S where _S' = prism' (\() -> S_S) (\S_S -> Just ()) instance CS Char where _S' = prism' (\() -> 'S') (\c -> case c of 'S' -> Just () _ -> Nothing) parse_S :: (CS x, CharParsing p) => p x parse_S = _S <$ char 'S' "S" data T_T = T_T deriving (Eq, Ord, Show, Generic) class CT x where _T' :: Prism' x () _T :: x _T = _T' # () instance CT () where _T' = id instance CT T_T where _T' = prism' (\() -> T_T) (\T_T -> Just ()) instance CT Char where _T' = prism' (\() -> 'T') (\c -> case c of 'T' -> Just () _ -> Nothing) parse_T :: (CT x, CharParsing p) => p x parse_T = _T <$ char 'T' "T" data U_U = U_U deriving (Eq, Ord, Show, Generic) class CU x where _U' :: Prism' x () _U :: x _U = _U' # () instance CU () where _U' = id instance CU U_U where _U' = prism' (\() -> U_U) (\U_U -> Just ()) instance CU Char where _U' = prism' (\() -> 'U') (\c -> case c of 'U' -> Just () _ -> Nothing) parse_U :: (CU x, CharParsing p) => p x parse_U = _U <$ char 'U' "U" data V_V = V_V deriving (Eq, Ord, Show, Generic) class CV x where _V' :: Prism' x () _V :: x _V = _V' # () instance CV () where _V' = id instance CV V_V where _V' = prism' (\() -> V_V) (\V_V -> Just ()) instance CV Char where _V' = prism' (\() -> 'V') (\c -> case c of 'V' -> Just () _ -> Nothing) parse_V :: (CV x, CharParsing p) => p x parse_V = _V <$ char 'V' "V" data W_W = W_W deriving (Eq, Ord, Show, Generic) class CW x where _W' :: Prism' x () _W :: x _W = _W' # () instance CW () where _W' = id instance CW W_W where _W' = prism' (\() -> W_W) (\W_W -> Just ()) instance CW Char where _W' = prism' (\() -> 'W') (\c -> case c of 'W' -> Just () _ -> Nothing) parse_W :: (CW x, CharParsing p) => p x parse_W = _W <$ char 'W' "W" data X_X = X_X deriving (Eq, Ord, Show, Generic) class CX x where _X' :: Prism' x () _X :: x _X = _X' # () instance CX () where _X' = id instance CX X_X where _X' = prism' (\() -> X_X) (\X_X -> Just ()) instance CX Char where _X' = prism' (\() -> 'X') (\c -> case c of 'X' -> Just () _ -> Nothing) parse_X :: (CX x, CharParsing p) => p x parse_X = _X <$ char 'X' "X" data Y_Y = Y_Y deriving (Eq, Ord, Show, Generic) class CY x where _Y' :: Prism' x () _Y :: x _Y = _Y' # () instance CY () where _Y' = id instance CY Y_Y where _Y' = prism' (\() -> Y_Y) (\Y_Y -> Just ()) instance CY Char where _Y' = prism' (\() -> 'Y') (\c -> case c of 'Y' -> Just () _ -> Nothing) parse_Y :: (CY x, CharParsing p) => p x parse_Y = _Y <$ char 'Y' "Y" data Z_Z = Z_Z deriving (Eq, Ord, Show, Generic) class CZ x where _Z' :: Prism' x () _Z :: x _Z = _Z' # () instance CZ () where _Z' = id instance CZ Z_Z where _Z' = prism' (\() -> Z_Z) (\Z_Z -> Just ()) instance CZ Char where _Z' = prism' (\() -> 'Z') (\c -> case c of 'Z' -> Just () _ -> Nothing) parse_Z :: (CZ x, CharParsing p) => p x parse_Z = _Z <$ char 'Z' "Z" ---- type IsLower x = ( Ca x , Cb x , Cc x , Cd x , Ce x , Cf x , Cg x , Ch x , Ci x , Cj x , Ck x , Cl x , Cm x , Cn x , Co x , Cp x , Cq x , Cr x , Cs x , Ct x , Cu x , Cv x , Cw x , Cx x , Cy x , Cz x ) data Lower = Lower_a | Lower_b | Lower_c | Lower_d | Lower_e | Lower_f | Lower_g | Lower_h | Lower_i | Lower_j | Lower_k | Lower_l | Lower_m | Lower_n | Lower_o | Lower_p | Lower_q | Lower_r | Lower_s | Lower_t | Lower_u | Lower_v | Lower_w | Lower_x | Lower_y | Lower_z deriving (Eq, Ord, Show, Generic) instance Ca Lower where _a' = prism' (\() -> Lower_a) (\c -> case c of Lower_a -> Just () _ -> Nothing) instance Cb Lower where _b' = prism' (\() -> Lower_b) (\c -> case c of Lower_b -> Just () _ -> Nothing) instance Cc Lower where _c' = prism' (\() -> Lower_c) (\c -> case c of Lower_c -> Just () _ -> Nothing) instance Cd Lower where _d' = prism' (\() -> Lower_d) (\c -> case c of Lower_d -> Just () _ -> Nothing) instance Ce Lower where _e' = prism' (\() -> Lower_e) (\c -> case c of Lower_e -> Just () _ -> Nothing) instance Cf Lower where _f' = prism' (\() -> Lower_f) (\c -> case c of Lower_f -> Just () _ -> Nothing) instance Cg Lower where _g' = prism' (\() -> Lower_g) (\c -> case c of Lower_g -> Just () _ -> Nothing) instance Ch Lower where _h' = prism' (\() -> Lower_h) (\c -> case c of Lower_h -> Just () _ -> Nothing) instance Ci Lower where _i' = prism' (\() -> Lower_i) (\c -> case c of Lower_i -> Just () _ -> Nothing) instance Cj Lower where _j' = prism' (\() -> Lower_j) (\c -> case c of Lower_j -> Just () _ -> Nothing) instance Ck Lower where _k' = prism' (\() -> Lower_k) (\c -> case c of Lower_k -> Just () _ -> Nothing) instance Cl Lower where _l' = prism' (\() -> Lower_l) (\c -> case c of Lower_l -> Just () _ -> Nothing) instance Cm Lower where _m' = prism' (\() -> Lower_m) (\c -> case c of Lower_m -> Just () _ -> Nothing) instance Cn Lower where _n' = prism' (\() -> Lower_n) (\c -> case c of Lower_n -> Just () _ -> Nothing) instance Co Lower where _o' = prism' (\() -> Lower_o) (\c -> case c of Lower_o -> Just () _ -> Nothing) instance Cp Lower where _p' = prism' (\() -> Lower_p) (\c -> case c of Lower_p -> Just () _ -> Nothing) instance Cq Lower where _q' = prism' (\() -> Lower_q) (\c -> case c of Lower_q -> Just () _ -> Nothing) instance Cr Lower where _r' = prism' (\() -> Lower_r) (\c -> case c of Lower_r -> Just () _ -> Nothing) instance Cs Lower where _s' = prism' (\() -> Lower_s) (\c -> case c of Lower_s -> Just () _ -> Nothing) instance Ct Lower where _t' = prism' (\() -> Lower_t) (\c -> case c of Lower_t -> Just () _ -> Nothing) instance Cu Lower where _u' = prism' (\() -> Lower_u) (\c -> case c of Lower_u -> Just () _ -> Nothing) instance Cv Lower where _v' = prism' (\() -> Lower_v) (\c -> case c of Lower_v -> Just () _ -> Nothing) instance Cw Lower where _w' = prism' (\() -> Lower_w) (\c -> case c of Lower_w -> Just () _ -> Nothing) instance Cx Lower where _x' = prism' (\() -> Lower_x) (\c -> case c of Lower_x -> Just () _ -> Nothing) instance Cy Lower where _y' = prism' (\() -> Lower_y) (\c -> case c of Lower_y -> Just () _ -> Nothing) instance Cz Lower where _z' = prism' (\() -> Lower_z) (\c -> case c of Lower_z -> Just () _ -> Nothing) parse_lower :: (IsLower x, CharParsing p) => p x parse_lower = parse_a <|> parse_b <|> parse_c <|> parse_d <|> parse_e <|> parse_f <|> parse_g <|> parse_h <|> parse_i <|> parse_j <|> parse_k <|> parse_l <|> parse_m <|> parse_n <|> parse_o <|> parse_p <|> parse_q <|> parse_r <|> parse_s <|> parse_t <|> parse_u <|> parse_v <|> parse_w <|> parse_x <|> parse_y <|> parse_z type IsUpper x = ( CA x , CB x , CC x , CD x , CE x , CF x , CG x , CH x , CI x , CJ x , CK x , CL x , CM x , CN x , CO x , CP x , CQ x , CR x , CS x , CT x , CU x , CV x , CW x , CX x , CY x , CZ x ) data Upper = Upper_A | Upper_B | Upper_C | Upper_D | Upper_E | Upper_F | Upper_G | Upper_H | Upper_I | Upper_J | Upper_K | Upper_L | Upper_M | Upper_N | Upper_O | Upper_P | Upper_Q | Upper_R | Upper_S | Upper_T | Upper_U | Upper_V | Upper_W | Upper_X | Upper_Y | Upper_Z deriving (Eq, Ord, Show, Generic) instance CA Upper where _A' = prism' (\() -> Upper_A) (\c -> case c of Upper_A -> Just () _ -> Nothing) instance CB Upper where _B' = prism' (\() -> Upper_B) (\c -> case c of Upper_B -> Just () _ -> Nothing) instance CC Upper where _C' = prism' (\() -> Upper_C) (\c -> case c of Upper_C -> Just () _ -> Nothing) instance CD Upper where _D' = prism' (\() -> Upper_D) (\c -> case c of Upper_D -> Just () _ -> Nothing) instance CE Upper where _E' = prism' (\() -> Upper_E) (\c -> case c of Upper_E -> Just () _ -> Nothing) instance CF Upper where _F' = prism' (\() -> Upper_F) (\c -> case c of Upper_F -> Just () _ -> Nothing) instance CG Upper where _G' = prism' (\() -> Upper_G) (\c -> case c of Upper_G -> Just () _ -> Nothing) instance CH Upper where _H' = prism' (\() -> Upper_H) (\c -> case c of Upper_H -> Just () _ -> Nothing) instance CI Upper where _I' = prism' (\() -> Upper_I) (\c -> case c of Upper_I -> Just () _ -> Nothing) instance CJ Upper where _J' = prism' (\() -> Upper_J) (\c -> case c of Upper_J -> Just () _ -> Nothing) instance CK Upper where _K' = prism' (\() -> Upper_K) (\c -> case c of Upper_K -> Just () _ -> Nothing) instance CL Upper where _L' = prism' (\() -> Upper_L) (\c -> case c of Upper_L -> Just () _ -> Nothing) instance CM Upper where _M' = prism' (\() -> Upper_M) (\c -> case c of Upper_M -> Just () _ -> Nothing) instance CN Upper where _N' = prism' (\() -> Upper_N) (\c -> case c of Upper_N -> Just () _ -> Nothing) instance CO Upper where _O' = prism' (\() -> Upper_O) (\c -> case c of Upper_O -> Just () _ -> Nothing) instance CP Upper where _P' = prism' (\() -> Upper_P) (\c -> case c of Upper_P -> Just () _ -> Nothing) instance CQ Upper where _Q' = prism' (\() -> Upper_Q) (\c -> case c of Upper_Q -> Just () _ -> Nothing) instance CR Upper where _R' = prism' (\() -> Upper_R) (\c -> case c of Upper_R -> Just () _ -> Nothing) instance CS Upper where _S' = prism' (\() -> Upper_S) (\c -> case c of Upper_S -> Just () _ -> Nothing) instance CT Upper where _T' = prism' (\() -> Upper_T) (\c -> case c of Upper_T -> Just () _ -> Nothing) instance CU Upper where _U' = prism' (\() -> Upper_U) (\c -> case c of Upper_U -> Just () _ -> Nothing) instance CV Upper where _V' = prism' (\() -> Upper_V) (\c -> case c of Upper_V -> Just () _ -> Nothing) instance CW Upper where _W' = prism' (\() -> Upper_W) (\c -> case c of Upper_W -> Just () _ -> Nothing) instance CX Upper where _X' = prism' (\() -> Upper_X) (\c -> case c of Upper_X -> Just () _ -> Nothing) instance CY Upper where _Y' = prism' (\() -> Upper_Y) (\c -> case c of Upper_Y -> Just () _ -> Nothing) instance CZ Upper where _Z' = prism' (\() -> Upper_Z) (\c -> case c of Upper_Z -> Just () _ -> Nothing) parse_upper :: (IsUpper x, CharParsing p) => p x parse_upper = parse_A <|> parse_B <|> parse_C <|> parse_D <|> parse_E <|> parse_F <|> parse_G <|> parse_H <|> parse_I <|> parse_J <|> parse_K <|> parse_L <|> parse_M <|> parse_N <|> parse_O <|> parse_P <|> parse_Q <|> parse_R <|> parse_S <|> parse_T <|> parse_U <|> parse_V <|> parse_W <|> parse_X <|> parse_Y <|> parse_Z type IsAlpha x = ( IsLower x , IsUpper x ) data Alpha = AlphaLower Lower | AlphaUpper Upper deriving (Eq, Ord, Show, Generic) _AlphaLower :: Prism' Alpha Lower _AlphaLower = prism' AlphaLower (\c -> case c of AlphaLower l -> Just l AlphaUpper _ -> Nothing) _AlphaUpper :: Prism' Alpha Upper _AlphaUpper = prism' AlphaUpper (\c -> case c of AlphaUpper l -> Just l AlphaLower _ -> Nothing) instance Ca Alpha where _a' = _AlphaLower . _a' instance Cb Alpha where _b' = _AlphaLower . _b' instance Cc Alpha where _c' = _AlphaLower . _c' instance Cd Alpha where _d' = _AlphaLower . _d' instance Ce Alpha where _e' = _AlphaLower . _e' instance Cf Alpha where _f' = _AlphaLower . _f' instance Cg Alpha where _g' = _AlphaLower . _g' instance Ch Alpha where _h' = _AlphaLower . _h' instance Ci Alpha where _i' = _AlphaLower . _i' instance Cj Alpha where _j' = _AlphaLower . _j' instance Ck Alpha where _k' = _AlphaLower . _k' instance Cl Alpha where _l' = _AlphaLower . _l' instance Cm Alpha where _m' = _AlphaLower . _m' instance Cn Alpha where _n' = _AlphaLower . _n' instance Co Alpha where _o' = _AlphaLower . _o' instance Cp Alpha where _p' = _AlphaLower . _p' instance Cq Alpha where _q' = _AlphaLower . _q' instance Cr Alpha where _r' = _AlphaLower . _r' instance Cs Alpha where _s' = _AlphaLower . _s' instance Ct Alpha where _t' = _AlphaLower . _t' instance Cu Alpha where _u' = _AlphaLower . _u' instance Cv Alpha where _v' = _AlphaLower . _v' instance Cw Alpha where _w' = _AlphaLower . _w' instance Cx Alpha where _x' = _AlphaLower . _x' instance Cy Alpha where _y' = _AlphaLower . _y' instance Cz Alpha where _z' = _AlphaLower . _z' instance CA Alpha where _A' = _AlphaUpper . _A' instance CB Alpha where _B' = _AlphaUpper . _B' instance CC Alpha where _C' = _AlphaUpper . _C' instance CD Alpha where _D' = _AlphaUpper . _D' instance CE Alpha where _E' = _AlphaUpper . _E' instance CF Alpha where _F' = _AlphaUpper . _F' instance CG Alpha where _G' = _AlphaUpper . _G' instance CH Alpha where _H' = _AlphaUpper . _H' instance CI Alpha where _I' = _AlphaUpper . _I' instance CJ Alpha where _J' = _AlphaUpper . _J' instance CK Alpha where _K' = _AlphaUpper . _K' instance CL Alpha where _L' = _AlphaUpper . _L' instance CM Alpha where _M' = _AlphaUpper . _M' instance CN Alpha where _N' = _AlphaUpper . _N' instance CO Alpha where _O' = _AlphaUpper . _O' instance CP Alpha where _P' = _AlphaUpper . _P' instance CQ Alpha where _Q' = _AlphaUpper . _Q' instance CR Alpha where _R' = _AlphaUpper . _R' instance CS Alpha where _S' = _AlphaUpper . _S' instance CT Alpha where _T' = _AlphaUpper . _T' instance CU Alpha where _U' = _AlphaUpper . _U' instance CV Alpha where _V' = _AlphaUpper . _V' instance CW Alpha where _W' = _AlphaUpper . _W' instance CX Alpha where _X' = _AlphaUpper . _X' instance CY Alpha where _Y' = _AlphaUpper . _Y' instance CZ Alpha where _Z' = _AlphaUpper . _Z' parse_alpha :: (IsAlpha x, CharParsing p) => p x parse_alpha = parse_lower <|> parse_upper lookup1 :: Eq a => a -> NonEmpty (a, b) -> b lookup1 a ((_, q) :| t) = fromMaybe q (lookup a t) lower_upper :: Iso' Lower Upper lower_upper = let r = (Lower_a, Upper_A) :| [ (Lower_b, Upper_B) , (Lower_c, Upper_C) , (Lower_d, Upper_D) , (Lower_e, Upper_E) , (Lower_f, Upper_F) , (Lower_g, Upper_G) , (Lower_h, Upper_H) , (Lower_i, Upper_I) , (Lower_j, Upper_J) , (Lower_k, Upper_K) , (Lower_l, Upper_L) , (Lower_m, Upper_M) , (Lower_n, Upper_N) , (Lower_o, Upper_O) , (Lower_p, Upper_P) , (Lower_q, Upper_Q) , (Lower_r, Upper_R) , (Lower_s, Upper_S) , (Lower_t, Upper_T) , (Lower_u, Upper_U) , (Lower_v, Upper_V) , (Lower_w, Upper_W) , (Lower_x, Upper_X) , (Lower_y, Upper_Y) , (Lower_z, Upper_Z) ] in iso (`lookup1` r) (`lookup1` ((\(m, n) -> (n, m)) <$> r)) upper_lower :: Iso' Upper Lower upper_lower = from lower_upper rotate1_lower :: Iso' Lower Lower rotate1_lower = let r = (Lower_a, Lower_b) :| [ (Lower_b, Lower_c) , (Lower_c, Lower_d) , (Lower_d, Lower_e) , (Lower_e, Lower_f) , (Lower_f, Lower_g) , (Lower_g, Lower_h) , (Lower_h, Lower_i) , (Lower_i, Lower_j) , (Lower_j, Lower_k) , (Lower_k, Lower_l) , (Lower_l, Lower_m) , (Lower_m, Lower_n) , (Lower_n, Lower_o) , (Lower_o, Lower_p) , (Lower_p, Lower_q) , (Lower_q, Lower_r) , (Lower_r, Lower_s) , (Lower_s, Lower_t) , (Lower_t, Lower_u) , (Lower_u, Lower_v) , (Lower_v, Lower_w) , (Lower_w, Lower_x) , (Lower_x, Lower_y) , (Lower_y, Lower_z) , (Lower_z, Lower_a) ] in iso (`lookup1` r) (`lookup1` ((\(m, n) -> (n, m)) <$> r)) rotate1_upper :: Iso' Upper Upper rotate1_upper = let r = (Upper_A, Upper_B) :| [ (Upper_B, Upper_C) , (Upper_C, Upper_D) , (Upper_D, Upper_E) , (Upper_E, Upper_F) , (Upper_F, Upper_G) , (Upper_G, Upper_H) , (Upper_H, Upper_I) , (Upper_I, Upper_J) , (Upper_J, Upper_K) , (Upper_K, Upper_L) , (Upper_L, Upper_M) , (Upper_M, Upper_N) , (Upper_N, Upper_O) , (Upper_O, Upper_P) , (Upper_P, Upper_Q) , (Upper_Q, Upper_R) , (Upper_R, Upper_S) , (Upper_S, Upper_T) , (Upper_T, Upper_U) , (Upper_U, Upper_V) , (Upper_V, Upper_W) , (Upper_W, Upper_X) , (Upper_X, Upper_Y) , (Upper_Y, Upper_Z) , (Upper_Z, Upper_A) ] in iso (`lookup1` r) (`lookup1` ((\(m, n) -> (n, m)) <$> r)) rotate1_alpha :: Iso' Alpha Alpha rotate1_alpha = iso (\a -> case a of AlphaLower l -> AlphaLower (l ^. rotate1_lower) AlphaUpper u -> AlphaUpper (u ^. rotate1_upper)) (\a -> case a of AlphaLower l -> AlphaLower (rotate1_lower # l) AlphaUpper u -> AlphaUpper (rotate1_upper # u)) mirror_lower :: Iso' Lower Lower mirror_lower = let r = (Lower_a, Lower_z) :| [ (Lower_b, Lower_y) , (Lower_c, Lower_x) , (Lower_d, Lower_w) , (Lower_e, Lower_v) , (Lower_f, Lower_u) , (Lower_g, Lower_t) , (Lower_h, Lower_s) , (Lower_i, Lower_r) , (Lower_j, Lower_q) , (Lower_k, Lower_p) , (Lower_l, Lower_o) , (Lower_m, Lower_n) , (Lower_n, Lower_m) , (Lower_o, Lower_l) , (Lower_p, Lower_k) , (Lower_q, Lower_j) , (Lower_r, Lower_i) , (Lower_s, Lower_h) , (Lower_t, Lower_g) , (Lower_u, Lower_f) , (Lower_v, Lower_e) , (Lower_w, Lower_d) , (Lower_x, Lower_c) , (Lower_y, Lower_b) , (Lower_z, Lower_a) ] in involuted (`lookup1` r) mirror_upper :: Iso' Upper Upper mirror_upper = let r = (Upper_A, Upper_Z) :| [ (Upper_B, Upper_Y) , (Upper_C, Upper_X) , (Upper_D, Upper_W) , (Upper_E, Upper_V) , (Upper_F, Upper_U) , (Upper_G, Upper_T) , (Upper_H, Upper_S) , (Upper_I, Upper_R) , (Upper_J, Upper_Q) , (Upper_K, Upper_P) , (Upper_L, Upper_O) , (Upper_M, Upper_N) , (Upper_N, Upper_M) , (Upper_O, Upper_L) , (Upper_P, Upper_K) , (Upper_Q, Upper_J) , (Upper_R, Upper_I) , (Upper_S, Upper_H) , (Upper_T, Upper_G) , (Upper_U, Upper_F) , (Upper_V, Upper_E) , (Upper_W, Upper_D) , (Upper_X, Upper_C) , (Upper_Y, Upper_B) , (Upper_Z, Upper_A) ] in involuted (`lookup1` r) mirror_alpha :: Iso' Alpha Alpha mirror_alpha = iso (\a -> case a of AlphaLower l -> AlphaLower (l ^. mirror_lower) AlphaUpper u -> AlphaUpper (u ^. mirror_upper)) (\a -> case a of AlphaLower l -> AlphaLower (mirror_lower # l) AlphaUpper u -> AlphaUpper (mirror_upper # u))