| Haskell |
| 문법 · 특징(모나드) · 개발 환경(GHC) · 학습 · 도서 · 사용 소프트웨어 · 사용 기업 |
| 프로그래밍 언어 문법 | |
| {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all" | 프로그래밍 언어 문법 C(포인터 · 구조체 · size_t) · C++(이름공간 · 클래스 · 특성 · 상수 표현식 · 람다 표현식 · 템플릿/제약조건/메타 프로그래밍) · C# · Java · Python(함수 · 모듈) · Kotlin · MATLAB · SQL · PHP · JavaScript(표준 내장 객체, this) · Haskell(모나드) · 숨 |
| 마크업 언어 문법 HTML · CSS | |
| 개념과 용어 함수(인라인 함수 · 고차 함수 · 콜백 함수 · 람다식) · 리터럴 · 문자열 · 식별자(예약어) · 상속 · 예외 · 조건문 · 반복문 · 비트 연산 · 참조에 의한 호출 · eval · 네임스페이스 · 호이스팅 | |
| 기타 #! · == · === · deprecated · GOTO · NaN · null · undefined · S-표현식 · 배커스-나우르 표기법 · 콰인(프로그래밍) | }}}}}} |
| 프로그래밍 언어 목록 · 분류 · 문법 · 예제 |
1. 개요
이 문서는 하스켈의 문법을 설명한다.2. 주석
하스켈에서-- 오른쪽에 적힌 것은 주석이다.-- 이 행은 주석이다.
main = putStrLn "Hello World!" -- 코드와 주석을 같은 줄에 적어도 된다.3. 함수 만들기
두 인자를 서로 더하는 함수add는 아래와 같이 만든다.add :: Int -> Int -> Int
add x y = x + y
4. 타입 적기
하스켈에서는 아래와 같이::로 타입을 표현한다.foo :: Int
foo = 42
- 이름을 적고
::를 적은 후 타입의 이름을 적는다. - 다른 줄에 이름을 적고
=를 적은 후 값을 적는다.
foo = 42 :: Int
5. 타입 만들기
5.1. data로 만드는 방법
5.1.1. 값이 하나인 타입
아래는 값이 하나인 타입을 만드는 예제 코드이다.data Foo = Bar
data는 타입을 만들 때 쓰는 키워드이다.Foo는 타입 이름이다.Bar는 값 이름이다.- 값
Bar의 타입은Foo이다. - 값과 타입의 이름은 대문자로 시작해야 한다.
data Foo = Foo
5.1.2. 값이 두 개 이상인 타입
값이 두 개 이상인 타입을 만들 때는 아래와 같이|로 여러 값을 구분하여 적는다.data Bool = False | True
타입 Bool의 값은 False이거나 True이다.아래는 값이 세 가지 경우인 타입의 예시이다.
data Number = One | Two | Three
위와 같이 |로 두 개 이상의 값을 표현한 것을 합(sum) 타입이라고 한다.값이 너무 많아서 한 줄에 다 적기 어려울 때는 아래처럼 개행하기도 한다.
data Number
= One
| Two
| Three
| Four
| Five5.1.3. 여러 타입을 가지고 한 타입 만들기
이미 존재하는 타입 두 개 이상을 조합해서 새로운 타입을 만들려면 아래처럼 적는다. 예를 들어 사람의 이름과 나이를 표현하는 타입Person은 아래와 같이 정의할 수 있다.data Person = Person String Int
이렇게 여러 타입을 조합해서 하나의 타입을 만든 것을 곱(product) 타입이라고 한다.5.2. type으로 만드는 방법
type은 타입의 별명을 만들 때 쓰는 키워드이다. 예를 들어 문자열 타입 String은 타입 [Char]의 별명이다. 아래처럼 별명을 정의한다.type String = [Char]
5.3. newtype으로 만드는 방법
6. 타입 클래스
6.1. Eq
class Eq a where
(==) :: a -> a -> Bool
타입 클래스 Eq의 메서드 ==는 타입이 같은 어떤 임의의 값 두 개를 비교하여 같으면 True를 리턴하고 다르면 False를 리턴한다. 타입 Bool에 해당하는 인스턴스 구현은 아래와 같다.instance Eq Bool where
True == True = True
False == False = True
_ = False
7. if
하스켈에서if문은 아래와 같이 작성한다.adult :: Int -> String
adult age = if age >= 18
then "성인입니다."
else "미성년자입니다."
if를 적고 결과 타입이Bool인 표현식을 적는다.then을 적고if에 적은 표현식의 결과가True인 경우의 결과 값을 적는다.else를 적고 표현식의 결과가False인 경우의 결과 값을 적는다.
이때 아래 사항을 지켜야 한다.
then에 적은 표현식의 타입과else에 적은 표현식의 타입이 같아야 한다.else와 그 표현식을 생략할 수 없다.