Skip to content

Instantly share code, notes, and snippets.

@nattybear
Last active January 25, 2023 20:50
Show Gist options
  • Save nattybear/6df16d5a2237a316ca8e9d7171d2aff5 to your computer and use it in GitHub Desktop.
Save nattybear/6df16d5a2237a316ca8e9d7171d2aff5 to your computer and use it in GitHub Desktop.
하스켈 함수의 타입

함수의 타입

아래 언어들의 타입 적는 방식을 비교해보자.

  • C언어
  • 파이썬
  • 하스켈

C언어

C언어에서는 함수를 아래와 같이 선언할 수 있다.

int inc(int x)
{
  return x + 1;
}
  • 먼저 함수의 리턴 타입을 적는다. int
  • 함수의 이름을 적는다. inc
  • 괄호 안에 인자의 타입과 이름을 적는다. (int x)

파이썬

파이썬에서는 함수를 선언할 때 타입을 적지 않아도 된다.

def inc(x):
  return x + 1

그런데 타입을 적을 수도 있다.

아래와 같이 타입 주석 Type Comments 라는 문법을 이용하면 된다.1

def inc(x):
  # type: (int) -> int
  return x + 1

인자가 여러개일 경우에는 아래와 같이 적는다.

def add(x, y):
  # type: (int, int) -> int
  return x + y

하스켈

하스켈에서도 파이썬과 마찬가지로 아래와 같이 타입을 적지 않고도 함수를 만들 수 있다.

inc x = x + 1

하스켈에서는 타입을 적는 방식이 파이썬의 타입 주석을 적는 방식과 비슷하다.

inc :: Int -> Int
  • 먼저 함수 이름을 적는다. inc
  • 쌍점 두개를 적는다. ::
  • 인자의 타입을 적는다. Int
  • 화살표를 적는다. ->
  • 마지막으로 리턴 타입을 적는다. Int

하스켈에서 함수의 타입은 아무 곳에나 적어도 되지만 보통은 아래와 같이 타입을 먼저 적고 바로 다음 줄에 함수를 정의한다.

inc :: Int -> Int
inc x = x + 1

인자가 여러개일 경우에는 아래와 같이 화살표 ->로 인자를 구분한다.

add :: Int -> Int -> Int
add x y = x + y

다른 점

  • C언어에서는 타입을 적어야 하지만 하스켈은 그렇지 않다.
  • 파이썬에서는 타입 주석을 적어야 하는 위치가 정해져 있지만 하스켈은 그렇지 않다.

아무 말

하스켈 잘 몰라도 타입 읽는 법만 알면 다른 사람과 대화가 된다?!

진짜 쉬운 하스켈

Footnotes

  1. 타입 주석은 거의 쓰지 않고 타입 힌트를 주로 사용하지만 타입 주석의 모양이 하스켈 타입 표기법과 모양이 비슷하기 때문에 여기에서는 타입 주석을 소개했다.

@nattybear
Copy link
Author

nattybear commented Jan 25, 2023

@dalinaum님의 의견으로 각주를 추가했습니다. 감사합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment