본문으로 건너뛰기

Hello, world!

이번 장에서는 간단한 HTML "hello world" 프로그램을 만들고 Haskell 툴체인을 사용하여 컴파일하고 실행해 보겠습니다.

아직 Haskell 툴체인을 설치하지 않았다면 haskell.org/downloads에 방문하여 Haskell 툴체인을 다운로드하고 설치하는 과정을 진행하세요.

하스켈 소스 파일​

하스켈 소스 파일은 여러 정의들로 구성됩니다.

가장 일반적인 형태의 정의는 다음과 같습니다:

<이름> = <표현식>

다음과 같은 제약사항이 있습니다:

  1. 이름은 소문자로 시작해야 합니다
  2. 파일 내에서 이름은 한 번만 사용할 수 있습니다

어떤 파일이 main이라는 정의를 가지고 있다면, 해당 파일은 실행 가능한 파일로 간주됩니다. 또한 main의 표현식은 프로그램의 시작점이 됩니다.

첫 번째 하스켈 소스코드 파일을 작성해 보겠습니다. hello.hs라는 이름의 새로운 파일을 만들고 다음과 같이 작성하세요:

main = putStrLn "<html><body>Hello, world!</body></html>"

위 코드에서 main이라는 이름을 정의하고 putStrLn "<html><body>Hello, world!</body></html>"라는 표현식을 바인딩했습니다.

main의 정의는 "<html><body>Hello, world!</body></html>" 값을 입력으로 putStrLn 함수를 호출한다는 의미입니다. putStrLn 함수는 하나의 문자열을 입력으로 받고 표준 출력으로 해당 문자열을 출력합니다.

주의

하스켈에서 함수에 인자를 전달할 때 괄호를 사용하지 않아도 됩니다.

이 프로그램을 실행하면 다음과 같은 텍스트가 화면에 출력됩니다:

<html><body>Hello, world!</body></html>

주의할 점은 main = 부분을 생략하고 단순히 putStrLn "<html><body>Hello, world!</body></html>"만 작성할 수는 없습니다. 왜나하면 이는 정의가 아니기 때문입니다. 파이썬이나 OCaml과 같은 언어에서는 허용되지만 하스켈이나 C와 같은 언어에서는 허용되지 않습니다.

프로그램 컴파일하기​

프로그램을 실행하기 위해, ghc라는 커맨드라인 프로그램을 사용하여 hello.hs라는 파일을 컴파일할 수 있습니다:

> ghc hello.hs
[1 of 1] Compiling Main ( hello.hs, hello.o )
Linking hello ...

hello.hs 파일을 ghc에 전달하면 다음과 같은 파일들이 생성됩니다:

  1. hello.o - 오브젝트 파일
  2. hello.hi - 하스켈 인터페이스 파일
  3. hello - 네이티브 실행 파일

컴파일 이후에, hello라는 파일을 실행할 수 있습니다:

> ./hello
<html><body>Hello, world!</body></html>

인터프리터로 실행하기​

다른 방법으로, 컴파일과 아티팩트 파일 생성 단계를 생략하고 runghc라는 커맨드라인 프로그램을 사용하여 소스 파일을 직접 실행할 수 있습니다:

> runghc hello.hs
<html><body>Hello, world!</body></html>

프로그램 실행 결과를 파일로 저장하고 Firefox 브라우저를 사용하여 해당 파일을 열 수도 있습니다.

> runghc hello.hs > hello.html
> firefox hello.html

위 명령어는 Firefox를 실행하고 Hello, world!라는 텍스트가 있는 웹 페이지를 표시합니다.

이번 튜토리얼에서는 runghc를 사용하는 것을 추천합니다. 컴파일 하는것이 더 빠른 프로그램을 생성하지만, 프로그램을 개발하고 자주 변경하는 동안에는 인터프리터를 사용하는 것이 피드백을 더 빠르게 받을 수 있기 때문입니다.

하스켈 툴체인에 대해 더 자세히 알고 싶다면 이 글을 참고하세요. 하지만 지금 당장은 위 내용만 알아도 충분합니다.

더 많은 바인딩​

putStrLn 함수에 직접 문자열을 전달하는 대신, HTML 문자열을 정의하는 새로운 이름을 만들어서 전달할 수도 있습니다. 이전에 만든 hello.hs 파일을 다음과 같이 수정하세요:

main = putStrLn myhtml

myhtml = "<html><body>Hello, world!</body></html>"

참고: 바인딩의 정의 순서는 중요하지 않습니다.