Data.Char
| Авторские права | (c) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD-стиль (см. файл libraries/base/LICENSE) |
| Поддержка | libraries@haskell.org |
| Стабильность | стабильная |
| Переносимость | переносимая |
| Безопасный Haskell | Надёжный |
| Язык | Haskell2010 |
Описание
Тип Char и связанные операции.
Тип символов Char представляет собой перечисление, значения которого соответствуют кодовым точкам Unicode (или, эквивалентно, ISO/IEC 10646) (т.е. символам; см. http://www.unicode.org/ для подробностей). Этот набор расширяет набор символов ISO 8859-1 (Latin-1) (первые 256 символов), который, в свою очередь, является расширением набора символов ASCII (первые 128 символов). Символьная константа в Haskell имеет тип Char.
Для преобразования Char в соответствующее значение Int, определённое Unicode, используйте toEnum и fromEnum из класса Enum соответственно (или, эквивалентно, ord и chr).
Примеры реализации
| Bounded Char | Since: base-2.1 |
| Enum Char | Since: base-2.1 |
| Eq Char | |
| Data Char | Since: base-4.0.0.0 |
Определено в Data.Data Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Char -> c Char Source gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Char Source toConstr :: Char -> Constr Source dataTypeOf :: Char -> DataType Source dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Char) Source dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Char) Source gmapT :: (forall b. Data b => b -> b) -> Char -> Char Source gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Char -> r Source gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Char -> r Source gmapQ :: (forall d. Data d => d -> u) -> Char -> [u] Source gmapQi :: Int -> (forall d. Data d => d -> u) -> Char -> u Source gmapM :: Monad m => (forall d. Data d => d -> m d) -> Char -> m Char Source gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Char -> m Char Source gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Char -> m Char Source | |
Определено в Foreign.Storable МетодыsizeOf :: Символ -> Целое Исходный код alignment :: Символ -> Целое Исходный код peekElemOff :: Указатель Символ -> Целое -> IO Символ Исходный код pokeElemOff :: Указатель Символ -> Целое -> Символ -> IO () Исходный код peekByteOff :: Указатель b -> Целое -> IO Символ Исходный код pokeByteOff :: Указатель b -> Целое -> Символ -> IO () Исходный код | |
| IsChar Символ | С тех пор как: base-2.1 |
Определено в Text.Printf | |
| PrintfArg Символ | С тех пор как: base-2.1 |
Определено в Text.Printf Методы | |
| Generic1 (URec Символ :: k -> Тип) | С тех пор как: base-4.9.0.0 |
Определено в GHC.Generics Связанные типыtype Rep1 (URec Символ) :: k -> Тип Исходный код | |
| Foldable (UChar :: Тип -> Тип) | С тех пор как: base-4.9.0.0 |
Определено в Data.Foldable Методыfold :: Monoid m => UChar m -> m Исходный код foldMap :: Monoid m => (a -> m) -> UChar a -> m Исходный код foldMap' :: Monoid m => (a -> m) -> UChar a -> m Исходный код foldr :: (a -> b -> b) -> b -> UChar a -> b Исходный код foldr' :: (a -> b -> b) -> b -> UChar a -> b Исходный код foldl :: (b -> a -> b) -> b -> UChar a -> b Исходный код foldl' :: (b -> a -> b) -> b -> UChar a -> b Исходный код foldr1 :: (a -> a -> a) -> UChar a -> a Исходный код foldl1 :: (a -> a -> a) -> UChar a -> a Исходный код toList :: UChar a -> [a] Исходный код null :: UChar a -> Bool Исходный код length :: UChar a -> Int Исходный код elem :: Eq a => a -> UChar a -> Bool Исходный код maximum :: Ord a => UChar a -> a Исходный код minimum :: Ord a => UChar a -> a Исходный код sum :: Num a => UChar a -> a Исходный код product :: Num a => UChar a -> a Исходный код | |
| Traversable (UChar :: Тип -> Тип) | С версии: base-4.9.0.0 |
Определено в Data.Traversable Методыtraverse :: Applicative f => (a -> f b) -> UChar a -> f (UChar b) Исходный код sequenceA :: Applicative f => UChar (f a) -> f (UChar a) Исходный код mapM :: Monad m => (a -> m b) -> UChar a -> m (UChar b) Исходный код sequence :: Monad m => UChar (m a) -> m (UChar a) Исходный код | |
| Functor (URec Char :: Тип -> Тип) | С версии: base-4.9.0.0 |
Определено в GHC.Generics | |
| Eq (URec Char p) | С версии: base-4.9.0.0 |
Определено в GHC.Generics | |
| Ord (URec Char p) | С версии: base-4.9.0.0 |
Определено в GHC.Generics Методыcompare :: URec Char p -> URec Char p -> Ordering Исходный код (<) :: URec Char p -> URec Char p -> Bool Исходный код (<=) :: URec Char p -> URec Char p -> Bool Исходный код (>) :: URec Char p -> URec Char p -> Bool Исходный код (>=) :: URec Char p -> URec Char p -> Bool Исходный код max :: URec Char p -> URec Char p -> URec Char p Исходный код min :: URec Char p -> URec Char p -> URec Char p Исходный код | |
| Show (URec Char p) | С момента: base-4.9.0.0 |
Определено в GHC.Generics | |
| Generic (URec Char p) | С момента: base-4.9.0.0 |
| data URec Char (p :: k) |
Используется для маркировки случаев С момента: base-4.9.0.0 |
| type Rep1 (URec Char :: k -> Type) | |
Определено в GHC.Generics | |
| type Rep (URec Char p) | |
Определено в GHC.Generics |
Классификация символов
Символы Юникода делятся на буквы, цифры, знаки, знаки препинания, символы, разделители (включая пробелы) и другие (включая управляющие символы).
isControl :: Символ -> Bool Исходный код
Выбирает управляющие символы, которые являются непечатаемыми символами подмножества Latin-1 в Юникоде.
isSpace :: Символ -> Bool Исходный код
Возвращает True для любого символа-пробела Юникода и управляющих символов \t, \n, \r, \f, \v.
isLower :: Символ -> Bool Исходный код
Выбирает строчные буквенные символы Юникода (буквы).
isUpper :: Символ -> Bool Исходный код
Выбирает заглавные или прописные буквенные символы Юникода (буквы). Прописные используются небольшим количеством лигатур букв, таких как односимвольное представление Lj.
isAlpha :: Символ -> Bool Исходный код
Выбирает буквенные символы Юникода (строчные, прописные и прописные буквы, а также буквы без учета регистра и модификаторные буквы). Эта функция эквивалентна isLetter.
isAlphaNum :: Символ -> Bool Исходный код
Выбирает буквенные или цифровые символы Юникода.
Обратите внимание, что цифровые знаки вне диапазона ASCII, а также цифровые символы, которые не являются цифрами, выбираются этой функцией, но не isDigit. Такие символы могут быть частью идентификаторов, но не используются принтером и читателем для представления чисел.
isPrint :: Символ -> Bool Исходный код
Выбирает печатаемые символы Юникода (буквы, цифры, знаки, знаки препинания, символы и пробелы).
isDigit :: Символ -> Bool Исходный код
Выбирает цифры ASCII, т.е. '0'..'9'.
isOctDigit :: Символ -> Bool Исходный код
Выбирает восьмеричные цифры ASCII, т.е. '0'..'7'.
isHexDigit :: Символ -> Bool Исходный код
Выбирает шестнадцатеричные цифры ASCII, т.е. '0'..'9', 'a'..'f', 'A'..'F'.
isLetter :: Символ -> Bool Исходный код
Выбирает буквенные символы Юникода (строчные, прописные и прописные буквы, а также буквы без учета регистра и модификаторные буквы). Эта функция эквивалентна isAlpha.
Эта функция возвращает True если её аргумент имеет одно из следующих GeneralCategory значений, или False в противном случае:
Эти классы определены в Базе данных символов Юникода, которая является частью стандарта Юникод. В том же документе определено, что такое и что не является "Буквой".
Примеры
Базовое использование:
>>> isLetter 'a' True >>> isLetter 'A' True >>> isLetter 'λ' True >>> isLetter '0' False >>> isLetter '%' False >>> isLetter '♥' False >>> isLetter '\31' False
Убедитесь, что isLetter и isAlpha эквивалентны.
>>> let chars = [(chr 0)..] >>> let letters = map isLetter chars >>> let alphas = map isAlpha chars >>> letters == alphas True
isMark :: Символ -> Bool Исходный код
Выбирает символы-знаки Юникода, например, диакритики и подобное, которые объединяются с предшествующими символами.
Эта функция возвращает True если её аргумент имеет одно из следующих GeneralCategory значений, или False в противном случае:
Эти классы определены в Базе данных символов Юникода, которая является частью стандарта Юникод. В том же документе определено, что такое и что не является "Знаком".
Примеры
Базовое использование:
>>> isMark 'a' False >>> isMark '0' False
Знаки объединения, такие как диакритические знаки, обычно должны следовать за другим символом, прежде чем стать печатаемыми:
>>> map isMark "ò" [False,True]
Пунктуация необязательно поддерживается:
>>> isMark '✓' False
isNumber :: Символ -> Bool Исходный код
Выбирает цифровые символы Юникода, включая цифры из различных алфавитов, римские цифры и т.д.
Эта функция возвращает True если её аргумент имеет одно из следующих GeneralCategory значений, или False в противном случае:
Эти классы определены в Базе данных символов Юникода, которая является частью стандарта Юникод. В том же документе определено, что такое и что не является "Числом".
Примеры
Базовое использование:
>>> isNumber 'a' False >>> isNumber '%' False >>> isNumber '3' True
ASCII '0' по '9' являются цифрами:
>>> and $ map isNumber ['0'..'9'] True
Римские цифры Юникода также являются "цифрами":
>>> isNumber 'Ⅸ' True
isPunctuation :: Символ -> Bool Исходный код
Выбирает символы пунктуации Юникода, включая различные виды соединителей, скобок и кавычек.
Эта функция возвращает True если её аргумент имеет одно из следующих GeneralCategory значений, или False в противном случае:
Эти классы определены в Базе данных символов Юникода, являющейся частью стандарта Юникод. Тот же документ определяет, что является, а что нет "Пунктуацией".
Примеры
Базовое использование:
>>> isPunctuation 'a' False >>> isPunctuation '7' False >>> isPunctuation '♥' False >>> isPunctuation '"' True >>> isPunctuation '?' True >>> isPunctuation '—' True
isSymbol :: Char -> Bool Исходный код
Выбирает символы Юникода, включая математические и валютные символы.
Эта функция возвращает True если её аргумент имеет один из следующих GeneralCategoryов, или False в противном случае:
Эти классы определены в Базе данных символов Юникода, являющейся частью стандарта Юникод. Тот же документ определяет, что является, а что нет "Символом".
Примеры
Базовое использование:
>>> isSymbol 'a' False >>> isSymbol '6' False >>> isSymbol '=' True
Определение "математического символа" может быть немного неинтуитивным в зависимости от вашего опыта:
>>> isSymbol '+' True >>> isSymbol '-' False
isSeparator :: Char -> Bool Исходный код
Выбирает разделительные и пробельные символы Юникода.
Эта функция возвращает True если её аргумент имеет один из следующих GeneralCategoryов, или False в противном случае:
Эти классы определены в Базе данных символов Юникода, являющейся частью стандарта Юникод. Тот же документ определяет, что является, а что нет "Разделителем".
Примеры
Базовое использование:
>>> isSeparator 'a' False >>> isSeparator '6' False >>> isSeparator ' ' True
Предупреждение: символы новой строки и табуляции не считаются разделителями.
>>> isSeparator '\n' False >>> isSeparator '\t' False
Но некоторые более экзотические символы являются (например, HTML):
>>> isSeparator '\160' True
Поддиапазоны
isAscii :: Char -> Bool Исходный код
Выбирает первые 128 символов набора символов Юникода, соответствующие набору символов ASCII.
isLatin1 :: Char -> Bool Исходный код
Выбирает первые 256 символов набора символов Юникода, соответствующие набору символов ISO 8859-1 (Latin-1).
isAsciiUpper :: Char -> Bool Исходный код
Выбирает заглавные буквы ASCII, т.е. символы, удовлетворяющие как isAscii, так и isUpper.
isAsciiLower :: Char -> Bool Исходный код
Выбирает строчные буквы ASCII, т.е. символы, удовлетворяющие как isAscii, так и isLower.
Общие категории Юникода
data GeneralCategory Исходный код
Общие категории Юникода (столбец 2 таблицы UnicodeData) в порядке, указанном в стандарте Юникод (в частности, в Базе данных символов Юникода).
Примеры
Базовое использование:
>>> :t OtherLetter OtherLetter :: GeneralCategory
Eq инстанс:
>>> UppercaseLetter == UppercaseLetter True >>> UppercaseLetter == LowercaseLetter False
Ord инстанс:
>>> NonSpacingMark <= MathSymbol True
Enum инстанс:
>>> enumFromTo ModifierLetter SpacingCombiningMark [ModifierLetter,OtherLetter,NonSpacingMark,SpacingCombiningMark]
Read инстанс:
>>> read "DashPunctuation" :: GeneralCategory DashPunctuation >>> read "17" :: GeneralCategory *** Exception: Prelude.read: no parse
Show инстанс:
>>> show EnclosingMark "EnclosingMark"
Bounded инстанс:
>>> minBound :: GeneralCategory UppercaseLetter >>> maxBound :: GeneralCategory NotAssigned
Ix инстанс:
>>> import Data.Ix ( index ) >>> index (OtherLetter,Control) FinalQuote 12 >>> index (OtherLetter,Control) Format *** Exception: Error in array index
Конструкторы
| UppercaseLetter | Lu: Буква, Заглавная |
| LowercaseLetter | Ll: Буква, Строчная |
| TitlecaseLetter | Lt: Буква, Строчная (заглавная) |
| ModifierLetter | Lm: Буква, Модификатор |
| OtherLetter | Lo: Буква, Другая |
| NonSpacingMark | Mn: Знак, Безпробельный |
| SpacingCombiningMark | Mc: Знак, Сочетаемый с пробелом |
| EnclosingMark | Me: Знак, Охватывающий |
| DecimalNumber | Nd: Число, Десятичное |
| LetterNumber | Nl: Число, Буква |
| OtherNumber | No: Число, Другое |
| ConnectorPunctuation | Pc: Пунктуация, Соединительная |
| DashPunctuation | Pd: Пунктуация, Тире |
| OpenPunctuation | Ps: Пунктуация, Открывающая |
| ClosePunctuation | Pe: Пунктуация, Закрывающая |
| InitialQuote | Pi: Пунктуация, Начальная кавычка |
| FinalQuote | Pf: Пунктуация, Конечная кавычка |
| OtherPunctuation | Po: Пунктуация, Другая |
| MathSymbol | Sm: Математический символ |
| CurrencySymbol | Sc: Символ валюты |
| ModifierSymbol | Sk: Символ модификатора |
| OtherSymbol | So: Символ, Другой |
| Space | Zs: Разделитель, Пробел |
| LineSeparator | Zl: Разделитель, Строка |
| ParagraphSeparator | Zp: Разделитель, Абзац |
| Control | Cc: Специальный, Управляющий |
| Format | Cf: Специальный, Формат |
| Surrogate | Cs: Специальный, Замещающий |
| PrivateUse | Co: Специальный, Частное использование |
| NotAssigned | Cn: Специальный, Не назначен |
Инстансы
Определено в GHC.Unicode МетодыshowsPrec :: Int -> GeneralCategory -> ShowS Исходный код show :: GeneralCategory -> Строка Исходный код showList :: [GeneralCategory] -> ShowS Исходный код | |
| Ix GeneralCategory | С момента: base-2.1 |
Определено в GHC.Unicode Методыrange :: (GeneralCategory, GeneralCategory) -> [GeneralCategory] Исходный код index :: (GeneralCategory, GeneralCategory) -> GeneralCategory -> Int Исходный код unsafeIndex :: (GeneralCategory, GeneralCategory) -> GeneralCategory -> Int Исходный код inRange :: (GeneralCategory, GeneralCategory) -> GeneralCategory -> Булево Исходный код rangeSize :: (GeneralCategory, GeneralCategory) -> Int Исходный код unsafeRangeSize :: (GeneralCategory, GeneralCategory) -> Int Исходный код | |
generalCategory :: Символ -> GeneralCategory Исходный код
Общую категорию символа Юникода. Это зависит от экземпляра Enum GeneralCategory, порядок которого должен совпадать с представлением категорий в стандарте Юникода.
Примеры
Базовое использование:
>>> generalCategory 'a' LowercaseLetter >>> generalCategory 'A' UppercaseLetter >>> generalCategory '0' DecimalNumber >>> generalCategory '%' OtherPunctuation >>> generalCategory '♥' OtherSymbol >>> generalCategory '\31' Control >>> generalCategory ' ' Space
Преобразование регистра
toUpper :: Символ -> Символ Исходный код
Преобразует букву в соответствующую заглавную букву, если таковая имеется. Любой другой символ возвращается без изменений.
toLower :: Символ -> Символ Исходный код
Преобразует букву в соответствующую строчную букву, если таковая имеется. Любой другой символ возвращается без изменений.
toTitle :: Символ -> Символ Исходный код
Преобразует букву в соответствующую букву прописного регистра или заглавную букву, если таковая имеется. (Регистр заглавной буквы отличается от регистра заглавной буквы только для небольшого числа лигатурных букв.) Любой другой символ возвращается без изменений.
Символы одиночных цифр
digitToInt :: Символ -> Целое число Исходный код
Преобразует одиночную цифру Char в соответствующее целое число. Эта функция терпит неудачу, если ее аргумент не соответствует isHexDigit, но распознает как заглавные, так и строчные шестнадцатеричные цифры (то есть, '0'..'9', 'a'..'f', 'A'..'F').
Примеры
Символы '0' по '9' должным образом преобразуются в 0..9:
>>> map digitToInt ['0'..'9'] [0,1,2,3,4,5,6,7,8,9]
Как заглавные, так и строчные 'A' по 'F' также преобразуются в 10..15.
>>> map digitToInt ['a'..'f'] [10,11,12,13,14,15] >>> map digitToInt ['A'..'F'] [10,11,12,13,14,15]
Все остальное вызывает исключение:
>>> digitToInt 'G' *** Exception: Char.digitToInt: not a digit 'G' >>> digitToInt '♥' *** Exception: Char.digitToInt: not a digit '\9829'
intToDigit :: Целое число -> Символ Исходный код
Преобразует целое число в диапазоне 0..15 в соответствующий одиночный символ цифры. Эта функция терпит неудачу при других входах и генерирует строчные шестнадцатеричные цифры.
Числовые представления
ord :: Символ -> Целое число Исходный код
Метод fromEnum ограничен типом Char.
chr :: Целое число -> Символ Исходный код
Метод toEnum ограничен типом Char.
Представления строк
showLitChar :: Символ -> ShowS Исходный код
Преобразует символ в строку, используя только печатаемые символы и соглашения об экранировании языка Haskell. Например:
showLitChar '\n' s = "\\n" ++ s
lexLitChar :: ReadS Строка Исходный код
Считывает строковое представление символа, используя соглашения об экранировании языка Haskell. Например:
lexLitChar "\\nHello" = [("\\n", "Hello")]
readLitChar :: ReadS Символ Исходный код
Считывает строковое представление символа, используя соглашения об экранировании языка Haskell, и преобразует его в символ, который он кодирует. Например:
readLitChar "\\nHello" = [('\n', "Hello")]
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/Data-Char.html