참 쉽죠?
박준규 @curry@hackers.pub
어제 그림 그리기를 좋아하는 딸래미와 함께 유튜브로 밥 아저씨 영상을 봤습니다. 밥 아저씨 특징이 그림에 '공을 들이지 않는다.'라고 하는데 저도 해커즈 퍼브에 남기는 글에 공을 들이지 않아 보려고 합니다.
왜냐면 며칠 전부터 아래 적을 주제를 어떻게 어디서부터 적을까 고민만 하다가 끝내 쓰지 못하고 있었기 때문입니다. 제가 쓰려는 건 엄청 간단한 건데 예상하셨겠지만 역시 하스켈 이야기입니다.
ghc, cabal 등은 이미 ghcup으로 설치했다고 전제하고 이야기를 시작합니다.
하스켈 프로젝트를 처음 시작하면 cabal을 어떻게 써야 할지 모르는 경우가 많습니다. 그럴 때는 저처럼 시작하면 좋습니다. 우선 프로젝트 이름을 정합니다. 저는 bar로 하겠습니다. 프로젝트 이름을 정했으면 그 이름으로 디렉터리를 생성하고 이동합니다.
$ mkdir bar
$ cd bar
그 다음에는 크게 두 가지 중에 하나를 골라야 하는데
- 실행 파일을 만들 건지
- 라이브러리를 만들 건지
정해야 합니다. 여기서는 복잡하니까 실행 파일을 만들기로 하겠습니다. 다음과 같이 입력하면 프로젝트에 필요한 기본적인 파일과 디렉터리가 생성됩니다.(여기까지 썼는데 생각한 것보다 글이 길어져서 긴 글로 옮겨 적습니다.)
cabal init --minimal --simple --exe
생성된 파일과 디렉터리는 다음과 같습니다.
% tree
.
├── app
│ └── Main.hs
├── bar.cabal
└── CHANGELOG.md
2 directories, 3 files
app/Main.hs에 적힌 코드는 다음과 같습니다.
module Main where
main :: IO ()
main = putStrLn "Hello, Haskell!"
이제 다음과 같이 입력하면 프로젝트를 빌드하고 앱을 실행할 수 있습니다.
cabal build
cabal run
출력 화면은 다음과 같습니다.
% cabal run
Warning: The package list for 'hackage.haskell.org' is 34 days old.
Run 'cabal update' to get the latest list of available packages.
Resolving dependencies...
Build profile: -w ghc-9.6.7 -O1
In order, the following will be built (use -v for more details):
- bar-0.1.0.0 (exe:bar) (first run)
Configuring executable 'bar' for bar-0.1.0.0...
Preprocessing executable 'bar' for bar-0.1.0.0...
Building executable 'bar' for bar-0.1.0.0...
[1 of 1] Compiling Main ( app/Main.hs, /Users/vincent/work/bar/dist-newstyle/build/aarch64-osx/ghc-9.6.7/bar-0.1.0.0/x/bar/build/bar/bar-tmp/Main.o )
[2 of 2] Linking /Users/vincent/work/bar/dist-newstyle/build/aarch64-osx/ghc-9.6.7/bar-0.1.0.0/x/bar/build/bar/bar
Hello, Haskell!
후, 공을 들이지 않기로 했으니까 여기까지만 적겠습니다.
참 쉽죠?