packages feed

spacechar-0.0.0.5: src/Data/Char/Space.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE LambdaCase #-}

module Data.Char.Space(
  -- * Individual space characters
  HasHorizontalTab(..)
, AsHorizontalTab(..)
, parseHorizontalTab
, HasLineFeed(..)
, AsLineFeed(..)
, parseLineFeed
, HasVerticalTab(..)
, AsVerticalTab(..)
, parseVerticalTab
, HasFormFeed(..)
, AsFormFeed(..)
, parseFormFeed
, HasCarriageReturn(..)
, AsCarriageReturn(..)
, parseCarriageReturn
, HasWhitespace(..)
, AsWhitespace(..)
, parseWhitespace
, HasNoBreakSpace(..)
, AsNoBreakSpace(..)
, parseNoBreakSpace
, HasOghamSpaceMark(..)
, AsOghamSpaceMark(..)
, parseOghamSpaceMark
, HasEnQuad(..)
, AsEnQuad(..)
, parseEnQuad
, HasEmQuad(..)
, AsEmQuad(..)
, parseEmQuad
, HasEnSpace(..)
, AsEnSpace(..)
, parseEnSpace
, HasEmSpace(..)
, AsEmSpace(..)
, parseEmSpace
, HasThreePerEmSpace(..)
, AsThreePerEmSpace(..)
, parseThreePerEmSpace
, HasFourPerEmSpace(..)
, AsFourPerEmSpace(..)
, parseFourPerEmSpace
, HasSixPerEmSpace(..)
, AsSixPerEmSpace(..)
, parseSixPerEmSpace
, HasFigureSpace(..)
, AsFigureSpace(..)
, parseFigureSpace
, HasPunctuationSpace(..)
, AsPunctuationSpace(..)
, parsePunctuationSpace
, HasThinSpace(..)
, AsThinSpace(..)
, parseThinSpace
, HasHairSpace(..)
, AsHairSpace(..)
, parseHairSpace
, HasNarrowNoBreakSpace(..)
, AsNarrowNoBreakSpace(..)
, parseNarrowNoBreakSpace
, HasMediumMathematicalSpace(..)
, AsMediumMathematicalSpace(..)
, parseMediumMathematicalSpace
, HasIdeographicSpace(..)
, AsIdeographicSpace(..)
, parseIdeographicSpace
-- * All space characters
, SpaceChar(..)
, HasSpaceChar(..)
, AsSpaceChar(..)
, parseSpaceChar
-- * ISO Latin-1 space characters /(horizontal tab, line feed, form feed, carriage return, whitespace)/
, IsoLatin1(..)
, HasIsoLatin1(..)
, AsIsoLatin1(..)
, parseIsoLatin1
) where

import Control.Category ( Category(id) )
import Control.Lens ( Prism', prism', (#), Lens' )
import Data.Bool ( Bool )
import Data.Char ( Char )
import Data.Eq ( Eq((==)) )
import Data.Int ( Int )
import Data.Foldable ( asum )
import Data.Functor ( Functor((<$)) )
import Data.Maybe ( Maybe(Nothing, Just) )
import Data.Ord ( Ord )
import GHC.Generics ( Generic )
import GHC.Show ( Show )
import Prelude(Integer)
import Text.Parser.Char ( CharParsing(satisfy) )
import Text.Parser.Combinators ( Parsing((<?>)) )

class HasHorizontalTab a where
  horizontalTab :: Lens' a ()

instance HasHorizontalTab () where
  horizontalTab =
    id

class AsHorizontalTab a where
  _HorizontalTab :: Prism' a ()
  _HorizontalTab' :: a
  _HorizontalTab' = _HorizontalTab # ()

instance AsHorizontalTab () where
  _HorizontalTab =
    id

instance AsHorizontalTab Char where
  _HorizontalTab =
    prism'
      (\() -> '\9')
      (\case
          '\9' -> Just ()
          _ -> Nothing
      )

instance AsHorizontalTab Int where
  _HorizontalTab =
    prism'
      (\() -> 9)
      (\case
          9 -> Just ()
          _ -> Nothing
      )

instance AsHorizontalTab Integer where
  _HorizontalTab =
    prism'
      (\() -> 9)
      (\case
          9 -> Just ()
          _ -> Nothing
      )

parseHorizontalTab ::
  CharParsing p =>
  p ()
parseHorizontalTab =
  satisfy' (== '\9') <?> "horizontal tab character"

class HasLineFeed a where
  lineFeed :: Lens' a ()

instance HasLineFeed () where
  lineFeed =
    id

class AsLineFeed a where
  _LineFeed :: Prism' a ()
  _LineFeed' :: a
  _LineFeed' = _LineFeed # ()

instance AsLineFeed () where
  _LineFeed =
    id

instance AsLineFeed Char where
  _LineFeed =
    prism'
      (\() -> '\10')
      (\case
          '\10' -> Just ()
          _ -> Nothing
      )

instance AsLineFeed Int where
  _LineFeed =
    prism'
      (\() -> 10)
      (\case
          10 -> Just ()
          _ -> Nothing
      )

instance AsLineFeed Integer where
  _LineFeed =
    prism'
      (\() -> 10)
      (\case
          10 -> Just ()
          _ -> Nothing
      )

parseLineFeed ::
  CharParsing p =>
  p ()
parseLineFeed =
  satisfy' (== '\10') <?> "line feed character"

class HasVerticalTab a where
  verticalTab :: Lens' a ()

instance HasVerticalTab () where
  verticalTab =
    id

class AsVerticalTab a where
  _VerticalTab :: Prism' a ()
  _VerticalTab' :: a
  _VerticalTab' = _VerticalTab # ()

instance AsVerticalTab () where
  _VerticalTab =
    id

instance AsVerticalTab Char where
  _VerticalTab =
    prism'
      (\() -> '\11')
      (\case
          '\11' -> Just ()
          _ -> Nothing
      )

instance AsVerticalTab Int where
  _VerticalTab =
    prism'
      (\() -> 11)
      (\case
          11 -> Just ()
          _ -> Nothing
      )

instance AsVerticalTab Integer where
  _VerticalTab =
    prism'
      (\() -> 11)
      (\case
          11 -> Just ()
          _ -> Nothing
      )

parseVerticalTab ::
  CharParsing p =>
  p ()
parseVerticalTab =
  satisfy' (== '\11') <?> "vertical tab character"

class HasFormFeed a where
  formFeed :: Lens' a ()

instance HasFormFeed () where
  formFeed =
    id

class AsFormFeed a where
  _FormFeed :: Prism' a ()
  _FormFeed' :: a
  _FormFeed' = _FormFeed # ()

instance AsFormFeed () where
  _FormFeed =
    id

instance AsFormFeed Char where
  _FormFeed =
    prism'
      (\() -> '\12')
      (\case
          '\12' -> Just ()
          _ -> Nothing
      )

instance AsFormFeed Int where
  _FormFeed =
    prism'
      (\() -> 12)
      (\case
          12 -> Just ()
          _ -> Nothing
      )

instance AsFormFeed Integer where
  _FormFeed =
    prism'
      (\() -> 12)
      (\case
          12 -> Just ()
          _ -> Nothing
      )

parseFormFeed ::
  CharParsing p =>
  p ()
parseFormFeed =
  satisfy' (== '\12') <?> "form feed character"

class HasCarriageReturn a where
  carriageReturn :: Lens' a ()

instance HasCarriageReturn () where
  carriageReturn =
    id

class AsCarriageReturn a where
  _CarriageReturn :: Prism' a ()
  _CarriageReturn' :: a
  _CarriageReturn' = _CarriageReturn # ()

instance AsCarriageReturn () where
  _CarriageReturn =
    id

instance AsCarriageReturn Char where
  _CarriageReturn =
    prism'
      (\() -> '\13')
      (\case
          '\13' -> Just ()
          _ -> Nothing
      )

instance AsCarriageReturn Int where
  _CarriageReturn =
    prism'
      (\() -> 13)
      (\case
          13 -> Just ()
          _ -> Nothing
      )

instance AsCarriageReturn Integer where
  _CarriageReturn =
    prism'
      (\() -> 13)
      (\case
          13 -> Just ()
          _ -> Nothing
      )

parseCarriageReturn ::
  CharParsing p =>
  p ()
parseCarriageReturn =
  satisfy' (== '\13') <?> "carriage return character"

class HasWhitespace a where
  whitespace :: Lens' a ()

instance HasWhitespace () where
  whitespace =
    id

class AsWhitespace a where
  _Whitespace :: Prism' a ()
  _Whitespace' :: a
  _Whitespace' = _Whitespace # ()

instance AsWhitespace () where
  _Whitespace =
    id

instance AsWhitespace Char where
  _Whitespace =
    prism'
      (\() -> '\32')
      (\case
          '\32' -> Just ()
          _ -> Nothing
      )

instance AsWhitespace Int where
  _Whitespace =
    prism'
      (\() -> 32)
      (\case
          32 -> Just ()
          _ -> Nothing
      )

instance AsWhitespace Integer where
  _Whitespace =
    prism'
      (\() -> 32)
      (\case
          32 -> Just ()
          _ -> Nothing
      )

parseWhitespace ::
  CharParsing p =>
  p ()
parseWhitespace =
  satisfy' (== '\32') <?> "whitespace character"

class HasNoBreakSpace a where
  noBreakSpace :: Lens' a ()

instance HasNoBreakSpace () where
  noBreakSpace =
    id

class AsNoBreakSpace a where
  _NoBreakSpace :: Prism' a ()
  _NoBreakSpace' :: a
  _NoBreakSpace' = _NoBreakSpace # ()

instance AsNoBreakSpace () where
  _NoBreakSpace =
    id

instance AsNoBreakSpace Char where
  _NoBreakSpace =
    prism'
      (\() -> '\160')
      (\case
          '\160' -> Just ()
          _ -> Nothing
      )

instance AsNoBreakSpace Int where
  _NoBreakSpace =
    prism'
      (\() -> 160)
      (\case
          160 -> Just ()
          _ -> Nothing
      )

instance AsNoBreakSpace Integer where
  _NoBreakSpace =
    prism'
      (\() -> 160)
      (\case
          160 -> Just ()
          _ -> Nothing
      )

parseNoBreakSpace ::
  CharParsing p =>
  p ()
parseNoBreakSpace =
  satisfy' (== '\160') <?> "no break space character"

class HasOghamSpaceMark a where
  oghamSpaceMark :: Lens' a ()

instance HasOghamSpaceMark () where
  oghamSpaceMark =
    id

class AsOghamSpaceMark a where
  _OghamSpaceMark :: Prism' a ()
  _OghamSpaceMark' :: a
  _OghamSpaceMark' = _OghamSpaceMark # ()

instance AsOghamSpaceMark () where
  _OghamSpaceMark =
    id

instance AsOghamSpaceMark Char where
  _OghamSpaceMark =
    prism'
      (\() -> '\5760')
      (\case
          '\5760' -> Just ()
          _ -> Nothing
      )

instance AsOghamSpaceMark Int where
  _OghamSpaceMark =
    prism'
      (\() -> 5760)
      (\case
          5760 -> Just ()
          _ -> Nothing
      )

instance AsOghamSpaceMark Integer where
  _OghamSpaceMark =
    prism'
      (\() -> 5760)
      (\case
          5760 -> Just ()
          _ -> Nothing
      )

parseOghamSpaceMark ::
  CharParsing p =>
  p ()
parseOghamSpaceMark =
  satisfy' (== '\5760') <?> "ogham space mark character"

class HasEnQuad a where
  enQuad :: Lens' a ()

instance HasEnQuad () where
  enQuad =
    id

class AsEnQuad a where
  _EnQuad :: Prism' a ()
  _EnQuad' :: a
  _EnQuad' = _EnQuad # ()

instance AsEnQuad () where
  _EnQuad =
    id

instance AsEnQuad Char where
  _EnQuad =
    prism'
      (\() -> '\8192')
      (\case
          '\8192' -> Just ()
          _ -> Nothing
      )

instance AsEnQuad Int where
  _EnQuad =
    prism'
      (\() -> 8192)
      (\case
          8192 -> Just ()
          _ -> Nothing
      )

instance AsEnQuad Integer where
  _EnQuad =
    prism'
      (\() -> 8192)
      (\case
          8192 -> Just ()
          _ -> Nothing
      )

parseEnQuad ::
  CharParsing p =>
  p ()
parseEnQuad =
  satisfy' (== '\8192') <?> "en quad character"

class HasEmQuad a where
  emQuad :: Lens' a ()

instance HasEmQuad () where
  emQuad =
    id

class AsEmQuad a where
  _EmQuad :: Prism' a ()
  _EmQuad' :: a
  _EmQuad' = _EmQuad # ()

instance AsEmQuad () where
  _EmQuad =
    id

instance AsEmQuad Char where
  _EmQuad =
    prism'
      (\() -> '\8193')
      (\case
          '\8193' -> Just ()
          _ -> Nothing
      )

instance AsEmQuad Int where
  _EmQuad =
    prism'
      (\() -> 8193)
      (\case
          8193 -> Just ()
          _ -> Nothing
      )

instance AsEmQuad Integer where
  _EmQuad =
    prism'
      (\() -> 8193)
      (\case
          8193 -> Just ()
          _ -> Nothing
      )

parseEmQuad ::
  CharParsing p =>
  p ()
parseEmQuad =
  satisfy' (== '\8193') <?> "em quad character"

class HasEnSpace a where
  enSpace :: Lens' a ()

instance HasEnSpace () where
  enSpace =
    id

class AsEnSpace a where
  _EnSpace :: Prism' a ()
  _EnSpace' :: a
  _EnSpace' = _EnSpace # ()

instance AsEnSpace () where
  _EnSpace =
    id

instance AsEnSpace Char where
  _EnSpace =
    prism'
      (\() -> '\8194')
      (\case
          '\8194' -> Just ()
          _ -> Nothing
      )

instance AsEnSpace Int where
  _EnSpace =
    prism'
      (\() -> 8194)
      (\case
          8194 -> Just ()
          _ -> Nothing
      )

instance AsEnSpace Integer where
  _EnSpace =
    prism'
      (\() -> 8194)
      (\case
          8194 -> Just ()
          _ -> Nothing
      )

parseEnSpace ::
  CharParsing p =>
  p ()
parseEnSpace =
  satisfy' (== '\8194') <?> "en space character"

class HasEmSpace a where
  emSpace :: Lens' a ()

instance HasEmSpace () where
  emSpace =
    id

class AsEmSpace a where
  _EmSpace :: Prism' a ()
  _EmSpace' :: a
  _EmSpace' = _EmSpace # ()

instance AsEmSpace () where
  _EmSpace =
    id

instance AsEmSpace Char where
  _EmSpace =
    prism'
      (\() -> '\8195')
      (\case
          '\8195' -> Just ()
          _ -> Nothing
      )

instance AsEmSpace Int where
  _EmSpace =
    prism'
      (\() -> 8195)
      (\case
          8195 -> Just ()
          _ -> Nothing
      )

instance AsEmSpace Integer where
  _EmSpace =
    prism'
      (\() -> 8195)
      (\case
          8195 -> Just ()
          _ -> Nothing
      )

parseEmSpace ::
  CharParsing p =>
  p ()
parseEmSpace =
  satisfy' (== '\8195') <?> "em space character"

class HasThreePerEmSpace a where
  threePerEmSpace :: Lens' a ()

instance HasThreePerEmSpace () where
  threePerEmSpace =
    id

class AsThreePerEmSpace a where
  _ThreePerEmSpace :: Prism' a ()
  _ThreePerEmSpace' :: a
  _ThreePerEmSpace' = _ThreePerEmSpace # ()

instance AsThreePerEmSpace () where
  _ThreePerEmSpace =
    id

instance AsThreePerEmSpace Char where
  _ThreePerEmSpace =
    prism'
      (\() -> '\8196')
      (\case
          '\8196' -> Just ()
          _ -> Nothing
      )

instance AsThreePerEmSpace Int where
  _ThreePerEmSpace =
    prism'
      (\() -> 8196)
      (\case
          8196 -> Just ()
          _ -> Nothing
      )

instance AsThreePerEmSpace Integer where
  _ThreePerEmSpace =
    prism'
      (\() -> 8196)
      (\case
          8196 -> Just ()
          _ -> Nothing
      )

parseThreePerEmSpace ::
  CharParsing p =>
  p ()
parseThreePerEmSpace =
  satisfy' (== '\8196') <?> "three per em space character"

class HasFourPerEmSpace a where
  fourPerEmSpace :: Lens' a ()

instance HasFourPerEmSpace () where
  fourPerEmSpace =
    id

class AsFourPerEmSpace a where
  _FourPerEmSpace :: Prism' a ()
  _FourPerEmSpace' :: a
  _FourPerEmSpace' = _FourPerEmSpace # ()

instance AsFourPerEmSpace () where
  _FourPerEmSpace =
    id

instance AsFourPerEmSpace Char where
  _FourPerEmSpace =
    prism'
      (\() -> '\8197')
      (\case
          '\8197' -> Just ()
          _ -> Nothing
      )

instance AsFourPerEmSpace Int where
  _FourPerEmSpace =
    prism'
      (\() -> 8197)
      (\case
          8197 -> Just ()
          _ -> Nothing
      )

instance AsFourPerEmSpace Integer where
  _FourPerEmSpace =
    prism'
      (\() -> 8197)
      (\case
          8197 -> Just ()
          _ -> Nothing
      )

parseFourPerEmSpace ::
  CharParsing p =>
  p ()
parseFourPerEmSpace =
  satisfy' (== '\8197') <?> "four per em space character"

class HasSixPerEmSpace a where
  sixPerEmSpace :: Lens' a ()

instance HasSixPerEmSpace () where
  sixPerEmSpace =
    id

class AsSixPerEmSpace a where
  _SixPerEmSpace :: Prism' a ()
  _SixPerEmSpace' :: a
  _SixPerEmSpace' = _SixPerEmSpace # ()

instance AsSixPerEmSpace () where
  _SixPerEmSpace =
    id

instance AsSixPerEmSpace Char where
  _SixPerEmSpace =
    prism'
      (\() -> '\8198')
      (\case
          '\8198' -> Just ()
          _ -> Nothing
      )

instance AsSixPerEmSpace Int where
  _SixPerEmSpace =
    prism'
      (\() -> 8198)
      (\case
          8198 -> Just ()
          _ -> Nothing
      )

instance AsSixPerEmSpace Integer where
  _SixPerEmSpace =
    prism'
      (\() -> 8198)
      (\case
          8198 -> Just ()
          _ -> Nothing
      )

parseSixPerEmSpace ::
  CharParsing p =>
  p ()
parseSixPerEmSpace =
  satisfy' (== '\8198') <?> "six per em space character"

class HasFigureSpace a where
  figureSpace :: Lens' a ()

instance HasFigureSpace () where
  figureSpace =
    id

class AsFigureSpace a where
  _FigureSpace :: Prism' a ()
  _FigureSpace' :: a
  _FigureSpace' = _FigureSpace # ()

instance AsFigureSpace () where
  _FigureSpace =
    id

instance AsFigureSpace Char where
  _FigureSpace =
    prism'
      (\() -> '\8199')
      (\case
          '\8199' -> Just ()
          _ -> Nothing
      )

instance AsFigureSpace Int where
  _FigureSpace =
    prism'
      (\() -> 8199)
      (\case
          8199 -> Just ()
          _ -> Nothing
      )

instance AsFigureSpace Integer where
  _FigureSpace =
    prism'
      (\() -> 8199)
      (\case
          8199 -> Just ()
          _ -> Nothing
      )

parseFigureSpace ::
  CharParsing p =>
  p ()
parseFigureSpace =
  satisfy' (== '\8199') <?> "figure space character"

class HasPunctuationSpace a where
  punctuationSpace :: Lens' a ()

instance HasPunctuationSpace () where
  punctuationSpace =
    id

class AsPunctuationSpace a where
  _PunctuationSpace :: Prism' a ()
  _PunctuationSpace' :: a
  _PunctuationSpace' = _PunctuationSpace # ()

instance AsPunctuationSpace () where
  _PunctuationSpace =
    id

instance AsPunctuationSpace Char where
  _PunctuationSpace =
    prism'
      (\() -> '\8200')
      (\case
          '\8200' -> Just ()
          _ -> Nothing
      )

instance AsPunctuationSpace Int where
  _PunctuationSpace =
    prism'
      (\() -> 8200)
      (\case
          8200 -> Just ()
          _ -> Nothing
      )

instance AsPunctuationSpace Integer where
  _PunctuationSpace =
    prism'
      (\() -> 8200)
      (\case
          8200 -> Just ()
          _ -> Nothing
      )

parsePunctuationSpace ::
  CharParsing p =>
  p ()
parsePunctuationSpace =
  satisfy' (== '\8200') <?> "punctuation space character"

class HasThinSpace a where
  thinSpace :: Lens' a ()

instance HasThinSpace () where
  thinSpace =
    id

class AsThinSpace a where
  _ThinSpace :: Prism' a ()
  _ThinSpace' :: a
  _ThinSpace' = _ThinSpace # ()

instance AsThinSpace () where
  _ThinSpace =
    id

instance AsThinSpace Char where
  _ThinSpace =
    prism'
      (\() -> '\8201')
      (\case
          '\8201' -> Just ()
          _ -> Nothing
      )

instance AsThinSpace Int where
  _ThinSpace =
    prism'
      (\() -> 8201)
      (\case
          8201 -> Just ()
          _ -> Nothing
      )

instance AsThinSpace Integer where
  _ThinSpace =
    prism'
      (\() -> 8201)
      (\case
          8201 -> Just ()
          _ -> Nothing
      )

parseThinSpace ::
  CharParsing p =>
  p ()
parseThinSpace =
  satisfy' (== '\8201') <?> "thin space character"

class HasHairSpace a where
  hairSpace :: Lens' a ()

instance HasHairSpace () where
  hairSpace =
    id

class AsHairSpace a where
  _HairSpace :: Prism' a ()
  _HairSpace' :: a
  _HairSpace' = _HairSpace # ()

instance AsHairSpace () where
  _HairSpace =
    id

instance AsHairSpace Char where
  _HairSpace =
    prism'
      (\() -> '\8202')
      (\case
          '\8202' -> Just ()
          _ -> Nothing
      )

instance AsHairSpace Int where
  _HairSpace =
    prism'
      (\() -> 8202)
      (\case
          8202 -> Just ()
          _ -> Nothing
      )

instance AsHairSpace Integer where
  _HairSpace =
    prism'
      (\() -> 8202)
      (\case
          8202 -> Just ()
          _ -> Nothing
      )

parseHairSpace ::
  CharParsing p =>
  p ()
parseHairSpace =
  satisfy' (== '\8202') <?> "hair space character"

class HasNarrowNoBreakSpace a where
  narrowNoBreakSpace :: Lens' a ()

instance HasNarrowNoBreakSpace () where
  narrowNoBreakSpace =
    id

class AsNarrowNoBreakSpace a where
  _NarrowNoBreakSpace :: Prism' a ()
  _NarrowNoBreakSpace' :: a
  _NarrowNoBreakSpace' = _NarrowNoBreakSpace # ()

instance AsNarrowNoBreakSpace () where
  _NarrowNoBreakSpace =
    id

instance AsNarrowNoBreakSpace Char where
  _NarrowNoBreakSpace =
    prism'
      (\() -> '\8239')
      (\case
          '\8239' -> Just ()
          _ -> Nothing
      )

instance AsNarrowNoBreakSpace Int where
  _NarrowNoBreakSpace =
    prism'
      (\() -> 8239)
      (\case
          8239 -> Just ()
          _ -> Nothing
      )

instance AsNarrowNoBreakSpace Integer where
  _NarrowNoBreakSpace =
    prism'
      (\() -> 8239)
      (\case
          8239 -> Just ()
          _ -> Nothing
      )

parseNarrowNoBreakSpace ::
  CharParsing p =>
  p ()
parseNarrowNoBreakSpace =
  satisfy' (== '\8239') <?> "narrow no break space character"

class HasMediumMathematicalSpace a where
  mediumMathematicalSpace :: Lens' a ()

instance HasMediumMathematicalSpace () where
  mediumMathematicalSpace =
    id

class AsMediumMathematicalSpace a where
  _MediumMathematicalSpace :: Prism' a ()
  _MediumMathematicalSpace' :: a
  _MediumMathematicalSpace' = _MediumMathematicalSpace # ()

instance AsMediumMathematicalSpace () where
  _MediumMathematicalSpace =
    id

instance AsMediumMathematicalSpace Char where
  _MediumMathematicalSpace =
    prism'
      (\() -> '\8287')
      (\case
          '\8287' -> Just ()
          _ -> Nothing
      )

instance AsMediumMathematicalSpace Int where
  _MediumMathematicalSpace =
    prism'
      (\() -> 8287)
      (\case
          8287 -> Just ()
          _ -> Nothing
      )

instance AsMediumMathematicalSpace Integer where
  _MediumMathematicalSpace =
    prism'
      (\() -> 8287)
      (\case
          8287 -> Just ()
          _ -> Nothing
      )

parseMediumMathematicalSpace ::
  CharParsing p =>
  p ()
parseMediumMathematicalSpace =
  satisfy' (== '\8287') <?> "medium mathematical space character"

class HasIdeographicSpace a where
  ideographicSpace :: Lens' a ()

instance HasIdeographicSpace () where
  ideographicSpace =
    id

class AsIdeographicSpace a where
  _IdeographicSpace :: Prism' a ()
  _IdeographicSpace' :: a
  _IdeographicSpace' = _IdeographicSpace # ()

instance AsIdeographicSpace () where
  _IdeographicSpace =
    id

instance AsIdeographicSpace Char where
  _IdeographicSpace =
    prism'
      (\() -> '\12288')
      (\case
          '\12288' -> Just ()
          _ -> Nothing
      )

instance AsIdeographicSpace Int where
  _IdeographicSpace =
    prism'
      (\() -> 12288)
      (\case
          12288 -> Just ()
          _ -> Nothing
      )

instance AsIdeographicSpace Integer where
  _IdeographicSpace =
    prism'
      (\() -> 12288)
      (\case
          12288 -> Just ()
          _ -> Nothing
      )

parseIdeographicSpace ::
  CharParsing p =>
  p ()
parseIdeographicSpace =
  satisfy' (== '\12288') <?> "ideographic space character"

data SpaceChar =
  HorizontalTab
  | LineFeed
  | VerticalTab
  | FormFeed
  | CarriageReturn
  | Whitespace
  | NoBreakSpace
  | OghamSpaceMark
  | EnQuad
  | EmQuad
  | EnSpace
  | EmSpace
  | ThreePerEmSpace
  | FourPerEmSpace
  | SixPerEmSpace
  | FigureSpace
  | PunctuationSpace
  | ThinSpace
  | HairSpace
  | NarrowNoBreakSpace
  | MediumMathematicalSpace
  | IdeographicSpace
  deriving (Eq, Ord, Show, Generic)

class HasSpaceChar a where
  spaceChar :: Lens' a SpaceChar

instance HasSpaceChar SpaceChar where
  spaceChar = id

class AsSpaceChar a where
  _SpaceChar :: Prism' a SpaceChar

instance AsSpaceChar SpaceChar where
  _SpaceChar = id

instance AsSpaceChar Char where
  _SpaceChar =
    prism'
      (\case
        HorizontalTab ->
          '\9'
        LineFeed ->
          '\10'
        VerticalTab ->
          '\11'
        FormFeed ->
          '\12'
        CarriageReturn ->
          '\13'
        Whitespace ->
          '\32'
        NoBreakSpace ->
          '\160'
        OghamSpaceMark ->
          '\5760'
        EnQuad ->
          '\8192'
        EmQuad ->
          '\8193'
        EnSpace ->
          '\8194'
        EmSpace ->
          '\8195'
        ThreePerEmSpace ->
          '\8196'
        FourPerEmSpace ->
          '\8197'
        SixPerEmSpace ->
          '\8198'
        FigureSpace ->
          '\8199'
        PunctuationSpace ->
          '\8200'
        ThinSpace ->
          '\8201'
        HairSpace ->
          '\8202'
        NarrowNoBreakSpace ->
          '\8239'
        MediumMathematicalSpace ->
          '\8287'
        IdeographicSpace ->
          '\12288'
      )
      (\case
        '\9' ->
          Just HorizontalTab
        '\10' ->
          Just LineFeed
        '\11' ->
          Just VerticalTab
        '\12' ->
          Just FormFeed
        '\13' ->
          Just CarriageReturn
        '\32' ->
          Just Whitespace
        '\160' ->
          Just NoBreakSpace
        '\5760' ->
          Just OghamSpaceMark
        '\8192' ->
          Just EnQuad
        '\8193' ->
          Just EmQuad
        '\8194' ->
          Just EnSpace
        '\8195' ->
          Just EmSpace
        '\8196' ->
          Just ThreePerEmSpace
        '\8197' ->
          Just FourPerEmSpace
        '\8198' ->
          Just SixPerEmSpace
        '\8199' ->
          Just FigureSpace
        '\8200' ->
          Just PunctuationSpace
        '\8201' ->
          Just ThinSpace
        '\8202' ->
          Just HairSpace
        '\8239' ->
          Just NarrowNoBreakSpace
        '\8287' ->
          Just MediumMathematicalSpace
        '\12288' ->
          Just IdeographicSpace
        _ ->
          Nothing
      )

parseSpaceChar ::
  CharParsing p =>
  p SpaceChar
parseSpaceChar =
  asum [
    HorizontalTab <$ parseHorizontalTab
  , LineFeed <$ parseLineFeed
  , VerticalTab <$ parseVerticalTab
  , FormFeed <$ parseFormFeed
  , CarriageReturn <$ parseCarriageReturn
  , Whitespace <$ parseWhitespace
  , NoBreakSpace <$ parseNoBreakSpace
  , OghamSpaceMark <$ parseOghamSpaceMark
  , EnQuad <$ parseEnQuad
  , EmQuad <$ parseEmQuad
  , EnSpace <$ parseEnSpace
  , EmSpace <$ parseEmSpace
  , ThreePerEmSpace <$ parseThreePerEmSpace
  , FourPerEmSpace <$ parseFourPerEmSpace
  , SixPerEmSpace <$ parseSixPerEmSpace
  , FigureSpace <$ parseFigureSpace
  , PunctuationSpace <$ parsePunctuationSpace
  , ThinSpace <$ parseThinSpace
  , HairSpace <$ parseHairSpace
  , NarrowNoBreakSpace <$ parseNarrowNoBreakSpace
  , MediumMathematicalSpace <$ parseMediumMathematicalSpace
  , IdeographicSpace <$ parseIdeographicSpace
  ]

instance AsHorizontalTab SpaceChar where
  _HorizontalTab =
    prism'
      (\() -> HorizontalTab)
      (\case
          HorizontalTab -> Just ()
          _ -> Nothing
      )

instance AsLineFeed SpaceChar where
  _LineFeed =
    prism'
      (\() -> LineFeed)
      (\case
          LineFeed -> Just ()
          _ -> Nothing
      )

instance AsVerticalTab SpaceChar where
  _VerticalTab =
    prism'
      (\() -> VerticalTab)
      (\case
          VerticalTab -> Just ()
          _ -> Nothing
      )

instance AsFormFeed SpaceChar where
  _FormFeed =
    prism'
      (\() -> FormFeed)
      (\case
          FormFeed -> Just ()
          _ -> Nothing
      )

instance AsCarriageReturn SpaceChar where
  _CarriageReturn =
    prism'
      (\() -> CarriageReturn)
      (\case
          CarriageReturn -> Just ()
          _ -> Nothing
      )

instance AsWhitespace SpaceChar where
  _Whitespace =
    prism'
      (\() -> Whitespace)
      (\case
          Whitespace -> Just ()
          _ -> Nothing
      )

instance AsNoBreakSpace SpaceChar where
  _NoBreakSpace =
    prism'
      (\() -> NoBreakSpace)
      (\case
          NoBreakSpace -> Just ()
          _ -> Nothing
      )

instance AsOghamSpaceMark SpaceChar where
  _OghamSpaceMark =
    prism'
      (\() -> OghamSpaceMark)
      (\case
          OghamSpaceMark -> Just ()
          _ -> Nothing
      )

instance AsEnQuad SpaceChar where
  _EnQuad =
    prism'
      (\() -> EnQuad)
      (\case
          EnQuad -> Just ()
          _ -> Nothing
      )

instance AsEmQuad SpaceChar where
  _EmQuad =
    prism'
      (\() -> EmQuad)
      (\case
          EmQuad -> Just ()
          _ -> Nothing
      )

instance AsEnSpace SpaceChar where
  _EnSpace =
    prism'
      (\() -> EnSpace)
      (\case
          EnSpace -> Just ()
          _ -> Nothing
      )

instance AsEmSpace SpaceChar where
  _EmSpace =
    prism'
      (\() -> EmSpace)
      (\case
          EmSpace -> Just ()
          _ -> Nothing
      )

instance AsThreePerEmSpace SpaceChar where
  _ThreePerEmSpace =
    prism'
      (\() -> ThreePerEmSpace)
      (\case
          ThreePerEmSpace -> Just ()
          _ -> Nothing
      )

instance AsFourPerEmSpace SpaceChar where
  _FourPerEmSpace =
    prism'
      (\() -> FourPerEmSpace)
      (\case
          FourPerEmSpace -> Just ()
          _ -> Nothing
      )

instance AsSixPerEmSpace SpaceChar where
  _SixPerEmSpace =
    prism'
      (\() -> SixPerEmSpace)
      (\case
          SixPerEmSpace -> Just ()
          _ -> Nothing
      )

instance AsFigureSpace SpaceChar where
  _FigureSpace =
    prism'
      (\() -> FigureSpace)
      (\case
          FigureSpace -> Just ()
          _ -> Nothing
      )

instance AsPunctuationSpace SpaceChar where
  _PunctuationSpace =
    prism'
      (\() -> PunctuationSpace)
      (\case
          PunctuationSpace -> Just ()
          _ -> Nothing
      )

instance AsThinSpace SpaceChar where
  _ThinSpace =
    prism'
      (\() -> ThinSpace)
      (\case
          ThinSpace -> Just ()
          _ -> Nothing
      )

instance AsHairSpace SpaceChar where
  _HairSpace =
    prism'
      (\() -> HairSpace)
      (\case
          HairSpace -> Just ()
          _ -> Nothing
      )

instance AsNarrowNoBreakSpace SpaceChar where
  _NarrowNoBreakSpace =
    prism'
      (\() -> NarrowNoBreakSpace)
      (\case
          NarrowNoBreakSpace -> Just ()
          _ -> Nothing
      )

instance AsMediumMathematicalSpace SpaceChar where
  _MediumMathematicalSpace =
    prism'
      (\() -> MediumMathematicalSpace)
      (\case
          MediumMathematicalSpace -> Just ()
          _ -> Nothing
      )

instance AsIdeographicSpace SpaceChar where
  _IdeographicSpace =
    prism'
      (\() -> IdeographicSpace)
      (\case
          IdeographicSpace -> Just ()
          _ -> Nothing
      )

data IsoLatin1 =
  HorizontalTab_
  | LineFeed_
  | FormFeed_
  | CarriageReturn_
  | Whitespace_
  deriving (Eq, Ord, Show, Generic)

class HasIsoLatin1 a where
  isoLatin1 :: Lens' a IsoLatin1

instance HasIsoLatin1 IsoLatin1 where
  isoLatin1 = id

class AsIsoLatin1 a where
  _IsoLatin1 :: Prism' a IsoLatin1

instance AsIsoLatin1 Char where
  _IsoLatin1 =
    prism'
      (\case
        HorizontalTab_ ->
          '\9'
        LineFeed_ ->
          '\10'
        FormFeed_ ->
          '\12'
        CarriageReturn_ ->
          '\13'
        Whitespace_ ->
          '\32'
      )
      (\case
        '\9' ->
          Just HorizontalTab_
        '\10' ->
          Just LineFeed_
        '\12' ->
          Just FormFeed_
        '\13' ->
          Just CarriageReturn_
        '\32' ->
          Just Whitespace_
        _ ->
          Nothing
      )

instance AsIsoLatin1 IsoLatin1 where
  _IsoLatin1 = id

parseIsoLatin1 ::
  CharParsing p =>
  p IsoLatin1
parseIsoLatin1 =
  asum [
    HorizontalTab_ <$ parseHorizontalTab
  , LineFeed_ <$ parseLineFeed
  , FormFeed_ <$ parseFormFeed
  , CarriageReturn_ <$ parseCarriageReturn
  , Whitespace_ <$ parseWhitespace
  ]

instance AsHorizontalTab IsoLatin1 where
  _HorizontalTab =
    prism'
      (\() -> HorizontalTab_)
      (\case
          HorizontalTab_ -> Just ()
          _ -> Nothing
      )

instance AsLineFeed IsoLatin1 where
  _LineFeed =
    prism'
      (\() -> LineFeed_)
      (\case
          LineFeed_ -> Just ()
          _ -> Nothing
      )

instance AsFormFeed IsoLatin1 where
  _FormFeed =
    prism'
      (\() -> FormFeed_)
      (\case
          FormFeed_ -> Just ()
          _ -> Nothing
      )

instance AsCarriageReturn IsoLatin1 where
  _CarriageReturn =
    prism'
      (\() -> CarriageReturn_)
      (\case
          CarriageReturn_ -> Just ()
          _ -> Nothing
      )

instance AsWhitespace IsoLatin1 where
  _Whitespace =
    prism'
      (\() -> Whitespace_)
      (\case
          Whitespace_ -> Just ()
          _ -> Nothing
      )

-- not exported

satisfy' ::
  CharParsing f =>
  (Char -> Bool)
  -> f ()
satisfy' p =
  () <$ satisfy p