상위 문서: Haskell
프로그래밍 언어 문법 | ||
{{{#!wiki style="margin: -16px -11px; word-break: keep-all" | <colbgcolor=#0095c7><colcolor=#fff,#000> 언어 문법 | C(포인터 · 구조체 · size_t) · C++(자료형 · 클래스 · 이름공간 · 상수 표현식 · 특성) · C# · Java · Python(함수 · 모듈) · Kotlin · MATLAB · SQL · PHP · JavaScript · Haskell(모나드) |
마크업 문법 | HTML · CSS | |
개념과 용어 | 함수(인라인 함수 · 고차 함수 · 람다식) · 리터럴 · 상속 · 예외 · 조건문 · 참조에 의한 호출 · eval | |
기타 | == · === · deprecated · NaN · null · undefined · 배커스-나우르 표기법 | |
프로그래밍 언어 예제 · 목록 · 분류 | }}} |
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
| Five
5.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
와 그 표현식을 생략할 수 없다.