Data.Char
Data.Char
Data.Char 모듈은 문자(char) 타입과 문자 분류·변환·표현 함수들을 제공해요.
본문
16.1 문자와 문자열 (Characters and strings)
data Char
문자 타입 Char는 값이 Unicode(또는 동등하게 ISO/IEC 10646) 문자를 나타내는 열거형(enumeration)이에요(자세한 내용은 http://www.unicode.org/ 참고). 이 집합은 ISO 8859-1(Latin-1) 문자 집합(첫 256자), 즉 ASCII 문자 집합(첫 128자)의 확장을 다시 확장한 것이에요. Haskell에서 문자 리터럴은 Char 타입을 가져요. Char를 Unicode가 정의한 대응하는 Int 값으로 변환하거나 그 반대로 변환하려면 Prelude.Enum 클래스의 Prelude.toEnum와 Prelude.fromEnum를 각각 사용해요(혹은 동등하게 ord와 chr을 사용해요).
instance Bounded Char
instance Enum Char
instance Eq Char
instance Ord Char
instance Read Char
instance Show Char
instance Ix Char
instance Storable Char
type String = [Char]
String은 문자들의 리스트예요. Haskell에서 문자열 상수는 String 타입의 값이에요.
16.2 문자 분류 (Character classification)
Unicode 문자는 문자(letter), 숫자(number), 기호(mark), 구두점(punctuation), 기호(symbol), 구분자(separator, 공백 포함) 및 기타(제어 문자 포함)로 나뉘어요.
isControl :: Char -> Bool
제어 문자를 고르는데, 이는 Unicode의 Latin-1 부분집합에서 인쇄되지 않는 문자들이에요.
isSpace :: Char -> Bool
Unicode 공백(space) 문자와 제어 문자 \t, \n, \r, \f, \v에 대해 True를 돌려줘요.
isLower :: Char -> Bool
소문자 알파벳 Unicode 문자(문자)를 골라요.
isUpper :: Char -> Bool
대문자 또는 title-case 알파벳 Unicode 문자(문자)를 골라요. Title case는 Lj의 단일 문자 형태 같은 소수의 문자 합자(ligature)에서 사용돼요.
isAlpha :: Char -> Bool
알파벳 Unicode 문자(소문자·대문자·title-case 문자, 그리고 caseless 스크립트의 문자와 조정(modifier) 문자를 더한 것)를 골라요. 이 함수는 Data.Char.isLetter와 동등해요.
isAlphaNum :: Char -> Bool
알파벳 또는 숫자 자릿수 Unicode 문자를 골라요. ASCII 범위 밖의 숫자 자릿수는 이 함수가 고르지만 isDigit은 고르지 않아요. 그런 자릿수는 식별자의 일부가 될 수 있지만, 프린터와 리더(reader)가 숫자를 나타내는 데는 사용하지 않아요.
isPrint :: Char -> Bool
인쇄 가능한 Unicode 문자(문자, 숫자, 기호, 구두점, 기호, 공백)를 골라요.
isDigit :: Char -> Bool
ASCII 숫자, 즉 '0' .. '9'를 골라요.
isOctDigit :: Char -> Bool
ASCII 8진수 숫자, 즉 '0' .. '7'을 골라요.
isHexDigit :: Char -> Bool
ASCII 16진수 숫자, 즉 '0' .. '9', 'a' .. 'f', 'A' .. 'F'를 골라요.
isLetter :: Char -> Bool
알파벳 Unicode 문자(소문자·대문자·title-case 문자, 그리고 caseless 스크립트의 문자와 조정 문자를 더한 것)를 골라요. 이 함수는 Data.Char.isAlpha와 동등해요.
isMark :: Char -> Bool
Unicode 기호(mark) 문자를 골라요. 예를 들어 악센트 등과 같이 앞의 문자와 결합하는 문자들이에요.
isNumber :: Char -> Bool
Unicode 숫자 문자를 골라요. 다양한 스크립트의 자릿수, 로마 숫자 등을 포함해요.
isPunctuation :: Char -> Bool
Unicode 구두점 문자를 골라요. 다양한 종류의 연결자(connector), 괄호, 인용 부호를 포함해요.
isSymbol :: Char -> Bool
Unicode 기호(symbol) 문자를 골라요. 수학 및 통화 기호를 포함해요.
isSeparator :: Char -> Bool
Unicode 공백 및 구분자(separator) 문자를 골라요.
16.3 하위 범위 (Subranges)
isAscii :: Char -> Bool
Unicode 문자 집합의 첫 128자를 골라요. ASCII 문자 집합에 해당해요.
isLatin1 :: Char -> Bool
Unicode 문자 집합의 첫 256자를 골라요. ISO 8859-1(Latin-1) 문자 집합에 해당해요.
isAsciiUpper :: Char -> Bool
ASCII 대문자를 골라요. 즉 isAscii와 isUpper를 모두 만족하는 문자예요.
isAsciiLower :: Char -> Bool
ASCII 소문자를 골라요. 즉 isAscii와 isLower를 모두 만족하는 문자예요.
16.4 Unicode 일반 범주 (Unicode general categories)
data GeneralCategory
= UppercaseLetter -- Lu: Letter, Uppercase
| LowercaseLetter -- Ll: Letter, Lowercase
| TitlecaseLetter -- Lt: Letter, Titlecase
| ModifierLetter -- Lm: Letter, Modifier
| OtherLetter -- Lo: Letter, Other
| NonSpacingMark -- Mn: Mark, Non-Spacing
| SpacingCombiningMark -- Mc: Mark, Spacing Combining
| EnclosingMark -- Me: Mark, Enclosing
| DecimalNumber -- Nd: Number, Decimal
| LetterNumber -- Nl: Number, Letter
| OtherNumber -- No: Number, Other
| ConnectorPunctuation -- Pc: Punctuation, Connector
| DashPunctuation -- Pd: Punctuation, Dash
| OpenPunctuation -- Ps: Punctuation, Open
| ClosePunctuation -- Pe: Punctuation, Close
| InitialQuote -- Pi: Punctuation, Initial quote
| FinalQuote -- Pf: Punctuation, Final quote
| OtherPunctuation -- Po: Punctuation, Other
| MathSymbol -- Sm: Symbol, Math
| CurrencySymbol -- Sc: Symbol, Currency
| ModifierSymbol -- Sk: Symbol, Modifier
| OtherSymbol -- So: Symbol, Other
| Space -- Zs: Separator, Space
| LineSeparator -- Zl: Separator, Line
| ParagraphSeparator -- Zp: Separator, Paragraph
| Control -- Cc: Other, Control
| Format -- Cf: Other, Format
| Surrogate -- Cs: Other, Surrogate
| PrivateUse -- Co: Other, Private Use
| NotAssigned -- Cn: Other, Not Assigned
Unicode 일반 범주(UnicodeData 표의 2열)를 Unicode 표준에 나열된 순서대로 나타낸 것이에요.
instance Bounded GeneralCategory
instance Enum GeneralCategory
instance Eq GeneralCategory
instance Ord GeneralCategory
instance Read GeneralCategory
instance Show GeneralCategory
instance Ix GeneralCategory
generalCategory :: Char -> GeneralCategory
문자의 Unicode 일반 범주예요.
16.5 대소문자 변환 (Case conversion)
toUpper :: Char -> Char
문자를 해당하는 대문자로 변환해요(있을 경우). 다른 문자는 원래대로 반환돼요.
toLower :: Char -> Char
문자를 해당하는 소문자로 변환해요(있을 경우). 다른 문자는 원래대로 반환돼요.
toTitle :: Char -> Char
문자를 해당하는 title-case 또는 대문자로 변환해요(있을 경우). (Title case는 소수의 합자 문자에서만 대문자와 다를 뿐이에요.) 다른 문자는 원래대로 반환돼요.
16.6 단일 자릿수 문자 (Single digit characters)
digitToInt :: Char -> Int
단일 자릿수 Char를 대응하는 Int로 변환해요. 이 함수는 인자가 isHexDigit을 만족하지 않으면 실패하는데, 대문자와 소문자 16진수 자릿수(즉 '0' .. '9', 'a' .. 'f', 'A' .. 'F')를 모두 인식해요.
intToDigit :: Int -> Char
0 .. 15 범위의 Int를 대응하는 단일 자릿수 Char로 변환해요. 이 함수는 다른 입력에 대해서는 실패하고, 소문자 16진수 자릿수를 생성해요.
16.7 숫자 표현 (Numeric representations)
ord :: Char -> Int
Prelude.fromEnum 메서드를 Data.Char.Char 타입으로 제한한 것이에요.
chr :: Int -> Char
Prelude.toEnum 메서드를 Data.Char.Char 타입으로 제한한 것이에요.
16.8 문자열 표현 (String representations)
showLitChar :: Char -> ShowS
문자를 인쇄 가능한 문자만 사용해 문자열로 변환하고, Haskell 소스 언어 이스케이프 관례를 사용해요. 예를 들어:
showLitChar '\n' s = "\\n" ++ s
lexLitChar :: ReadS String
Haskell 소스 언어 이스케이프 관례를 사용해 문자의 문자열 표현을 읽어요. 예를 들어:
lexLitChar "\\nHello" = [("\\n", "Hello")]
readLitChar :: ReadS Char
Haskell 소스 언어 이스케이프 관례를 사용해 문자의 문자열 표현을 읽고, 그것이 인코딩하는 문자로 변환해요. 예를 들어:
readLitChar "\\nHello" = [('\n', "Hello")]
더 알아보기 (Learn more)
- Unicode 일반 범주와 자릿수·문자 분류 함수들의 실제 동작은 Unicode 표준(UnicodeData 표)과 함께 보면 좋아요.
- 문자열 조작과 관련된 함수들은
Data.List모듈의 문자열 관련 함수(예:lines,words)를 함께 참고해요.