    -- |
    -- Module      : Unicode.Char.Identifiers
    -- Copyright   : (c) 2021 Composewell Technologies and Contributors
    -- License     : Apache-2.0
    -- Maintainer  : streamly@composewell.com
    -- Stability   : experimental
    --
    -- Unicode Identifier and Pattern Syntax property functions based on
    -- [Unicode Standard Annex #31](https://www.unicode.org/reports/tr31/)

    module Unicode.Char.Identifiers
        ( isIDContinue
        , isIDStart
        , isXIDContinue
        , isXIDStart
        , isPatternSyntax
        , isPatternWhitespace
        )
    where

    import qualified Unicode.Internal.Char.DerivedCoreProperties as P
    import qualified Unicode.Internal.Char.PropList as P

    -- | Returns 'True' if a character is an identifier continue character.
    --
    -- @since 0.2.0
    {-# INLINE isIDContinue #-}
    isIDContinue :: Char -> Bool
    isIDContinue :: Char -> Bool
    isIDContinue = Char -> Bool
    P.isID_Continue

    -- | Returns 'True' if a character is an identifier start character.
    --
    -- @since 0.2.0
    {-# INLINE isIDStart #-}
    isIDStart :: Char -> Bool
    isIDStart :: Char -> Bool
    isIDStart = Char -> Bool
    P.isID_Start

    -- | Returns 'True' if a character is an identifier continue character,
    -- using the NFKC modifications detailed in
    -- [UAX #31, 5.1](https://www.unicode.org/reports/tr31/#NFKC_Modifications).
    --
    -- @since 0.2.0
    {-# INLINE isXIDContinue #-}
    isXIDContinue :: Char -> Bool
    isXIDContinue :: Char -> Bool
    isXIDContinue = Char -> Bool
    P.isXID_Continue

    -- | Returns 'True' if a character is an identifier start character,
    -- using the NFKC modifications detailed in
    -- [UAX #31, 5.1](https://www.unicode.org/reports/tr31/#NFKC_Modifications).
    --
    -- @since 0.2.0
    {-# INLINE isXIDStart #-}
    isXIDStart :: Char -> Bool
    isXIDStart :: Char -> Bool
    isXIDStart = Char -> Bool
    P.isXID_Start

    -- | Returns 'True' if a character is a pattern syntax character.
    --
    -- @since 0.2.0
    {-# INLINE isPatternSyntax #-}
    isPatternSyntax :: Char -> Bool
    isPatternSyntax :: Char -> Bool
    isPatternSyntax = Char -> Bool
    P.isPattern_Syntax

    -- | Returns 'True' if a character is a pattern whitespace character.
    --
    -- @since 0.2.0
    {-# INLINE isPatternWhitespace #-}
    isPatternWhitespace :: Char -> Bool
    isPatternWhitespace :: Char -> Bool
    isPatternWhitespace = Char -> Bool
    P.isPattern_White_Space