プログラミング

Haskellで競技プログラミングをするための環境構築

内山浩佑

はじめに

最近、社内でHaskellを学ぶ熱意が高まっており、私も競技プログラミングでHaskellを使いたいと考え、環境構築を行いました。この記事では、Haskellの実行環境の構築から、Visual Studio Code上でのプログラミング環境の設定、そしてAtCoderへの提出までの手順を紹介しています。

なお、本記事ではHaskell自体の解説は行っておらず、実行環境はMacOSを想定しています。

GHCupのインストール

GHCup
https://www.haskell.org/ghcup/

GHCupは、HaskellのコンパイラであるGHCをインストールするためのツールです。複数のバージョンをインストール・切り替えをするために使用します。

公式のトップページに記載されている以下のコマンドを実行します。

curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh

GHCupコマンドの確認

以下のようなコマンドを実行して、問題がないか確認できます。

# オプションの一覧が表示される
$ ghcup

# インストール状況が表示される
$ ghcup list

# TUIが起動する
$ ghcup tui

Visual Studio Codeの設定

以下のコマンドで、Haskell Language Serverをインストールします。

$ ghcup install hls

Visual Studio Code上では、「Haskell」拡張をインストールします。

https://marketplace.visualstudio.com/items?itemName=haskell.haskell

管理方法は「Automatically via GHCup」を選択します。

AtCoderにコードを提出する

最初に書くコードとして、AtCoderの練習用問題を利用します。

A - Welcome to AtCoder
https://atcoder.jp/contests/practice/tasks/practice_1

Haskellのコード例が記載されているので、Visual Studio Code上で写経します。

https://atcoder.jp/contests/practice/tasks/practice_1#Haskell

import Control.Applicative

main :: IO ()
main = do
    -- 整数の入力
    a <- readLn
    -- スペース区切り整数の入力
    [b, c] <- map read . words <$> getLine
    -- 文字列の入力
    s <- getLine
    -- 出力
    putStrLn $ show (a + b + c) ++ " " ++ s

前述の設定がうまくいっているかどうかを確認するために、シンタックスハイライトされることを確認します。

ファイルを保存し、以下のコマンドでコードを実行します(hello.hsという名前で保存した場合)。

$ runghc hello.hs

標準入力を受け付けるプログラムなので、サンプル入力をコピペします。

1
2 3
test
$ runghc hello.hs
1
2 3
test
6 test

最後の行に、6 test が出力されれば、想定どおりの処理です。

プログラムが正しく動作することを確認した後、AtCoderに提出します。書いたプログラムをフォームにコピー&ペーストし、言語として Haskell (GHC 8.8.3) を選択します。

https://atcoder.jp/contests/practice/submit?taskScreenName=practice_1

file

「選択」ボタンを押下して、提出します。

自分の提出ページに移動して、実行結果が AC となれば、OKです。

以上で、HaskellでAtCoderに参加するための環境構築が完了しました。

参考

AUTHOR
uchiko
uchiko
記事URLをコピーしました