Skip to content

Instantly share code, notes, and snippets.

@toyboot4e
Last active June 22, 2025 05:46
Show Gist options
  • Save toyboot4e/2f2c29cc86149de2cd6064636d2feb5e to your computer and use it in GitHub Desktop.
Save toyboot4e/2f2c29cc86149de2cd6064636d2feb5e to your computer and use it in GitHub Desktop.
AtCoder 2025 language update for Haskell
# SPDX-License-Identifier: CC0-1.0
# 言語インストールスクリプト
#
# 言語をインストールするためのスクリプトをTOML形式で記述していただきます
# 各キー/値ごとにコメントで
# キー: キー名
# 型: そのキーに対する値の型
# 要否: そのキーが必須であるか任意であるか
# 説明: そのキーの説明
# 例: そのキーの値として指定するものの例
# が記述してあるので、 必須 の項目については必ず記述してください
# 直後にそのキー/値の例が記述してあるので参考にしてください
#
# 実行環境は以下の通りとなっています
#
# OS: Ubuntu 24.04.1
# カレントディレクトリ: /judge
# 環境変数: HOME=/home/runner
# LANG=C.UTF-8
# PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ATCODER=1
# キー: language
# 型: 文字列
# 要否: 必須
# 説明: プログラミング言語の名前
# 例: 'C'
# 'C++'
# 'Java'
# 'Python3'
language = 'Haskell'
# キー: display
# 型: 文字列
# 要否: 必須
# 説明: この言語として表示される文字列
# このインストールスクリプトでインストールされる言語に関する表示される文字列を記述してください
# ここで指定された文字列は提出画面における言語選択で表示される文字列となります
# そのためプログラミング言語名や言語のバージョン、コンパイラ/インタプリタ名など、ユーザが提出言語を選ぶときに必要となる情報を記述してください
# ただしコンパイルコマンドや実行コマンド、インストールされるライブラリなどは別途ルールページなどで見ることができますので提出画面における言語選択として妥当な文字列を記述してください
# 具体的には現状の提出画面における表示を参考にしてください
# 例: 'C++23 (GCC 15.1)'
# 'C++23 (Clang 18.1.8)'
# 'Java24 (OpenJDK 24.0.1)'
# 'Python3 (CPython 3.13.3)'
display = 'Haskell (GHC 9.8.4)'
# キー: name
# 型: 文字列
# 要否: 必須
# 説明: コンパイラ/インタプリタの名前
# コンパイラ、インタプリタの実装名を記述してください
# 例: 'GCC'
# 'Clang'
# 'OpenJDK'
name = 'GHC'
# キー: version
# 型: 文字列
# 要否: 必須
# 説明: コンパイラ/インタプリタのバージョン番号
# コンパイラ、インタプリタの実装バージョンを記述してください
# 例: '14.2'
# '18.1.8'
# '23'
version = '9.8.4'
# キー: license
# 型: 配列
# 配列内の各要素はテーブルで、1要素が1つのライセンス
# テーブルに記述するキー/値は以下の通り
# キー: url
# 型: 文字列
# 要否: 必須
# 説明: ライセンスが確認できるURL
# 例: 'https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=COPYING3;hb=refs/heads/master'
# 'https://github.com/llvm/llvm-project/blob/main/clang/LICENSE.TXT'
# 'https://openjdk.org/legal/gplv2+ce.html'
#
# キー: name
# 型: 文字列
# 要否: 必須
# 説明: ライセンス名
# https://spdx.org/licenses/ にある Identifier で記述してください
# ライセンスを記述するうえで例外規定を含む場合は後述の `exception` に分けて記述してください
# つまりこの項目では `WITH` を使った書き方はしないでください
# 上記リストにないライセンスの場合は問い合わせをしてください
# 例: 'GPL-3.0-and-later'
# 'Apache-2.0'
# 'GPL-2.0-only'
#
# キー: exception
# 型: 文字列
# 要否: 任意
# 説明: ライセンスの例外規定名
# ライセンスにおける例外規定を https://spdx.org/licenses/exceptions-index.html にある Identifier で記述してください
# この項目は任意項目となっていますがライセンスに例外規定がある場合は必須です
# 任意となっているのは例外規定がない場合に書く内容がないためであり、例外規定を書かなくていいという意味ではありません
# 上記リストにないライセンスの場合は問い合わせをしてください
# 例: 'GCC-exception-3.1'
# 'LLVM-exception'
# 'Classpath-exception-2.0'
# 要否: 必須
# 説明: コンパイラ/インタプリタのライセンス
# コンパイラ、インタプリタの実装のライセンスを記述してください
# デュアルライセンスなど、ライセンスが複数ある場合はすべて記述してください
license = [
{ name = 'BSD-3-Clause', url = 'https://www.haskell.org/ghc/license.html' },
]
# キー: library
# 型: テーブル
# テーブル内の各キー/値はライブラリ1つを表し、キーにはライブラリ名を、値はテーブル型でライブラリの詳細を記述
# ライブラリの詳細として記述できるキー/値は以下の通>り
# キー: license
# 型: テーブルの配列
# ここに記述する型/値は上記 `license` と同様なのでそちらを参照
# 要否: 必須
# 説明: ライブラリのライセンス
#
# キー: indirect
# 型: ブール値
# 要否: 任意
# 説明: 間接的にインストールされるライブラリかどうか
# 他ライブラリから依存されてインストールされるライブラリである場合にこのキーの値に `true` を指定してください
# このキー/値が設定されなかった場合のデフォルト値は `false` で、直接的にインストールするライブラリであることを表します
# このキーが存在する理由は、直接インストールされるライブラリが依存しているライブラリのライセンスを明示するためにあります
# つまり使用したいライブラリが依存しているライブラリもライセンス的に使用できることを明示するために存在し、これが `true` にされたライブラリはインストールされたライブラリ一覧としては表示されません
#
# キー: version
# 型: 文字列
# 要否: 任意
# 説明: ライブラリのバージョン番号
#
# `indirect` のとおり、間接的に使用されるライブラリのライセンスもできるだけ記述してください
# バージョンに関してはコンパイラ/インタプリタと違い任意であるが、ユーザが確認できなくなるためどうしてもわからない場合などを除き記述すること
# 要否: 任意
# 説明: 追加でインストールされるライブラリ一覧
# ここに記述されたものは言語一覧などの表示に使用されるものでありインストールなどには影響しません
# そのためインストールスクリプトで記述されるものと一致するようにしてください
# 例: boost = { license = [ { name = 'Boost Software License', url = 'https://www.boost.org/LICENSE_1_0.txt' } ], version = '1.86.0' }
library.Cabal = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/Cabal/src/LICENSE' },
], version = '3.14.2.0' }
library.Cabal-syntax = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/Cabal-syntax/src/LICENSE' },
], version = '3.14.2.0' }
library.OneTuple = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/OneTuple/src/LICENSE' },
], indirect = true, version = '0.4.2' }
library.QuickCheck = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/QuickCheck/src/LICENSE' },
], version = '2.16.0.0' }
library.StateVar = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/StateVar/src/LICENSE' },
], indirect = true, version = '1.2.2' }
library.ac-library-hs = { license = [
{ name = 'CC0-1.0', url = 'https://hackage.haskell.org/package/ac-library-hs/src/LICENSE' },
], version = '1.5.2.0' }
library.adjunctions = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/adjunctions/src/LICENSE' },
], version = '4.4.3' }
library.ansi-terminal = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/ansi-terminal/src/LICENSE' },
], indirect = true, version = '1.1.2' }
library.ansi-terminal-types = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/ansi-terminal-types/src/LICENSE' },
], indirect = true, version = '1.1' }
library.array = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/array/src/LICENSE' },
], version = '0.5.8.0' }
library.assoc = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/assoc/src/LICENSE' },
], indirect = true, version = '1.1.1' }
library.atomic-primops = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/atomic-primops/src/LICENSE' },
], indirect = true, version = '0.8.8' }
library.attoparsec = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/attoparsec/src/LICENSE' },
], version = '0.14.4' }
library.base = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/base/src/LICENSE' },
], version = '4.19.2.0' }
library.base-orphans = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/base-orphans/src/LICENSE' },
], indirect = true, version = '0.9.3' }
library.bifunctors = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/bifunctors/src/LICENSE' },
], version = '5.6.2' }
library.binary = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/binary/src/LICENSE' },
], version = '0.8.9.1' }
library.bitvec = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/bitvec/src/LICENSE' },
], version = '1.1.5.0' }
library.blaze-builder = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/blaze-builder/src/LICENSE' },
], indirect = true, version = '0.4.3' }
library.blaze-html = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/blaze-html/src/LICENSE' },
], indirect = true, version = '0.9.2.0' }
library.blaze-markup = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/blaze-markup/src/LICENSE' },
], indirect = true, version = '0.8.3.0' }
library.bytestring = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/bytestring/src/LICENSE' },
], version = '0.12.1.0' }
library.call-stack = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/call-stack/src/LICENSE' },
], indirect = true, version = '0.4.0' }
library.case-insensitive = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/case-insensitive/src/LICENSE' },
], indirect = true, version = '1.2.1.0' }
library.charset = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/charset/src/LICENSE' },
], indirect = true, version = '0.3.12' }
library.clock = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/clock/src/LICENSE' },
], indirect = true, version = '0.8.4' }
library.colour = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/colour/src/LICENSE' },
], indirect = true, version = '2.3.6' }
library.comonad = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/comonad/src/LICENSE' },
], version = '5.0.9' }
library.containers = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/containers/src/LICENSE' },
], version = '0.6.8' }
library.contravariant = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/contravariant/src/LICENSE' },
], version = '1.5.5' }
library.data-default = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/data-default/src/LICENSE' },
], indirect = true, version = '0.8.0.1' }
library.data-default-class = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/data-default-class/src/LICENSE' },
], indirect = true, version = '0.2.0.0' }
library.deepseq = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/deepseq/src/LICENSE' },
], version = '1.5.1.0' }
library.directory = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/directory/src/LICENSE' },
], version = '1.3.8.5' }
library.distributive = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/distributive/src/LICENSE' },
], version = '0.6.2.1' }
library.exceptions = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/exceptions/src/LICENSE' },
], version = '0.10.7' }
library.extra = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/extra/src/LICENSE' },
], version = '1.8' }
library.fgl = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/fgl/src/LICENSE' },
], version = '5.8.3.0' }
library.filepath = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/filepath/src/LICENSE' },
], version = '1.4.301.0' }
library.fingertree = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/fingertree/src/LICENSE' },
], indirect = true, version = '0.1.6.1' }
library.flow = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/flow/src/LICENSE.txt' },
], version = '2.0.0.9' }
library.foldl = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/foldl/src/LICENSE' },
], indirect = true, version = '1.4.18' }
library.free = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/free/src/LICENSE' },
], version = '5.2' }
library.ghc-bignum = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/ghc-bignum/src/LICENSE' },
], version = '1.3' }
library.ghc-prim = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/ghc-prim/src/LICENSE' },
], version = '0.11.0' }
library.hashable = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/hashable/src/LICENSE' },
], version = '1.5.0.0' }
library.heaps = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/heaps/src/LICENSE' },
], version = '0.4.1' }
library.hmatrix = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/hmatrix/src/LICENSE' },
], version = '0.20.2' }
library.hmatrix-glpk = { license = [
{ name = 'GPL-3.0-only', url = 'https://hackage.haskell.org/package/hmatrix-glpk/src/LICENSE' },
], version = '0.19.0.0' }
library.hmatrix-gsl = { license = [
{ name = 'GPL-3.0-only', url = 'https://hackage.haskell.org/package/hmatrix-gsl/src/LICENSE' },
], version = '0.19.0.1' }
library.hmatrix-special = { license = [
{ name = 'GPL-3.0-only', url = 'https://hackage.haskell.org/package/hmatrix-special/src/LICENSE' },
], version = '0.19.0.0' }
library.ilist = { license = [
{ name = 'MPL-2.0', url = 'https://hackage.haskell.org/package/ilist/src/LICENSE' },
], version = '0.4.0.1' }
library.indexed-traversable = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/indexed-traversable/src/LICENSE' },
], version = '0.1.4' }
library.indexed-traversable-instances = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/indexed-traversable-instances/src/LICENSE' },
], version = '0.1.2' }
library.integer-gmp = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/integer-gmp/src/LICENSE' },
], version = '1.1' }
library.integer-logarithms = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/integer-logarithms/src/LICENSE' },
], version = '1.0.4' }
library.invariant = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/invariant/src/LICENSE' },
], indirect = true, version = '0.6.4' }
library.kan-extensions = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/kan-extensions/src/LICENSE' },
], version = '5.2.7' }
library.lens = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/lens/src/LICENSE' },
], version = '5.3.5' }
library.linear-base = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/linear-base/src/LICENSE' },
], version = '0.5.0' }
library.linear-generics = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/linear-generics/src/LICENSE' },
], indirect = true, version = '0.2.3' }
library.list-t = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/list-t/src/LICENSE' },
], version = '1.0.5.7' }
library.logict = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/logict/src/LICENSE' },
], indirect = true, version = '0.8.2.0' }
library.massiv = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/massiv/src/LICENSE' },
], version = '1.0.5.0' }
library.math-functions = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/math-functions/src/LICENSE' },
], indirect = true, version = '0.3.4.4' }
library.megaparsec = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/megaparsec/src/LICENSE.md' },
], version = '9.7.0' }
library.mmorph = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/mmorph/src/LICENSE' },
], indirect = true, version = '1.2.1' }
library.monad-control = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/monad-control/src/LICENSE' },
], indirect = true, version = '1.0.3.1' }
library.monad-memo = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/monad-memo/src/LICENSE' },
], version = '0.5.4' }
library.mono-traversable = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/mono-traversable/src/LICENSE' },
], version = '1.0.21.0' }
library.mtl = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/mtl/src/LICENSE' },
], version = '2.3.1' }
library.mutable-containers = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/mutable-containers/src/LICENSE' },
], version = '0.3.4.1' }
library.mwc-random = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/mwc-random/src/LICENSE' },
], version = '0.15.2.0' }
library.os-string = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/os-string/src/LICENSE' },
], indirect = true, version = '2.0.7' }
library.parallel = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/parallel/src/LICENSE' },
], version = '3.2.2.0' }
library.parsec = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/parsec/src/LICENSE' },
], version = '3.1.18.0' }
library.parser-combinators = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/parser-combinators/src/LICENSE.md' },
], version = '1.3.0' }
library.parsers = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/parsers/src/LICENSE' },
], indirect = true, version = '0.12.12' }
library.pretty = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/pretty/src/LICENSE' },
], version = '1.1.3.6' }
library.prettyprinter = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/prettyprinter/src/LICENSE.md' },
], indirect = true, version = '1.7.1' }
library.prettyprinter-ansi-terminal = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/prettyprinter-ansi-terminal/src/LICENSE.md' },
], indirect = true, version = '1.1.3' }
library.primitive = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/primitive/src/LICENSE' },
], version = '0.9.1.0' }
library.process = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/process/src/LICENSE' },
], version = '1.6.25.0' }
library.profunctors = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/profunctors/src/LICENSE' },
], version = '5.6.3' }
library.psqueues = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/psqueues/src/LICENSE' },
], version = '0.2.8.1' }
library.pvar = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/pvar/src/LICENSE' },
], indirect = true, version = '1.0.0.0' }
library.random = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/random/src/LICENSE' },
], version = '1.2.1.3' }
library.reducers = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/reducers/src/LICENSE' },
], indirect = true, version = '3.12.5' }
library.reflection = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/reflection/src/LICENSE' },
], version = '2.1.9' }
library.regex-base = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/regex-base/src/LICENSE' },
], indirect = true, version = '0.94.0.3' }
library.regex-tdfa = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/regex-tdfa/src/LICENSE' },
], version = '1.3.2.4' }
library.safe-exceptions = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/safe-exceptions/src/LICENSE' },
], version = '0.1.7.4' }
library.scheduler = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/scheduler/src/LICENSE' },
], indirect = true, version = '2.0.1.0' }
library.scientific = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/scientific/src/LICENSE' },
], version = '0.3.8.0' }
library.semialign = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/semialign/src/LICENSE' },
], version = '1.3.1' }
library.semigroupoids = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/semigroupoids/src/LICENSE' },
], version = '6.0.1' }
library.semigroups = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/semigroups/src/LICENSE' },
], indirect = true, version = '0.20' }
library.split = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/split/src/LICENSE' },
], version = '0.2.5' }
library.splitmix = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/splitmix/src/LICENSE' },
], indirect = true, version = '0.1.2' }
library.stm = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/stm/src/LICENSE' },
], version = '2.5.3.1' }
library.storable-complex = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/storable-complex/src/LICENSE' },
], indirect = true, version = '0.2.3.0' }
library.storable-record = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/storable-record/src/LICENSE' },
], indirect = true, version = '0.0.7' }
library.storable-tuple = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/storable-tuple/src/LICENSE' },
], indirect = true, version = '0.1' }
library.strict = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/strict/src/LICENSE' },
], version = '0.5.1' }
library.strict-lens = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/strict-lens/src/LICENSE' },
], version = '0.4.1' }
library.tagged = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/tagged/src/LICENSE' },
], version = '0.8.9' }
library.template-haskell = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/template-haskell/src/LICENSE' },
], version = '2.21.0.0' }
library.text = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/text/src/LICENSE' },
], version = '2.1.2' }
library.tf-random = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/tf-random/src/LICENSE' },
], version = '0.5' }
library.th-abstraction = { license = [
{ name = 'ISC', url = 'https://hackage.haskell.org/package/th-abstraction/src/LICENSE' },
], indirect = true, version = '0.7.1.0' }
library.these = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/these/src/LICENSE' },
], version = '1.2.1' }
library.these-lens = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/these-lens/src/LICENSE' },
], version = '1.0.2' }
library.time = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/time/src/LICENSE' },
], version = '1.12.2' }
library.transformers = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/transformers/src/LICENSE' },
], version = '0.6.1.0' }
library.transformers-base = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/transformers-base/src/LICENSE' },
], indirect = true, version = '0.4.6' }
library.transformers-compat = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/transformers-compat/src/LICENSE' },
], indirect = true, version = '0.7.2' }
library.trifecta = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/trifecta/src/LICENSE' },
], version = '2.1.4' }
library.unboxing-vector = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/unboxing-vector/src/LICENSE' },
], version = '0.2.0.0' }
library.unix = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/unix/src/LICENSE' },
], version = '2.8.6.0' }
library.unliftio-core = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/unliftio-core/src/LICENSE' },
], indirect = true, version = '0.2.1.0' }
library.unordered-containers = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/unordered-containers/src/LICENSE' },
], version = '0.2.20' }
library.utf8-string = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/utf8-string/src/LICENSE' },
], indirect = true, version = '1.0.2' }
library.utility-ht = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/utility-ht/src/LICENSE' },
], version = '0.0.17.2' }
library.vector = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/vector/src/LICENSE' },
], version = '0.13.2.0' }
library.vector-algorithms = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/vector-algorithms/src/LICENSE' },
], version = '0.9.1.0' }
library.vector-split = { license = [
{ name = 'MIT', url = 'https://hackage.haskell.org/package/vector-split-1.0.0.4/src/LICENSE' },
], version = '1.0.0.4' }
library.vector-stream = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/vector-stream/src/LICENSE' },
], version = '0.1.0.1' }
library.vector-th-unbox = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/vector-th-unbox/src/LICENSE' },
], version = '0.2.2' }
library.void = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/void/src/LICENSE' },
], indirect = true, version = '0.7.3' }
library.wide-word = { license = [
{ name = 'BSD-2-Clause', url = 'https://hackage.haskell.org/package/wide-word/src/LICENSE' },
], version = '0.1.7.1' }
library.witherable = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/witherable/src/LICENSE' },
], version = '0.5' }
library.xhtml = { license = [
{ name = 'BSD-3-Clause', url = 'https://hackage.haskell.org/package/xhtml/src/LICENSE' },
], version = '3000.2.2.1' }
# キー: filename
# 型: 文字列
# 要否: 必須
# 説明: 配置するファイル名
# 提出されたソースコードがこの名前でカレントディレクトリに作成されます
# 基本的には Main + 拡張子 で統一してください
# ただしファイル名に意味がある場合やプロジェクトファイルを用いる場合は適切にファイルパスを指定してください
# 例: 'Main.c'
# 'Main.cpp'
# 'src/main.rs'
filename = 'submission/app/Main.hs'
# キー: install
# 型: 文字列
# 要否: 必須
# 説明: インストールスクリプト
# このスクリプトでは言語環境のイメージを作成するために使用されます
# そのためコンパイラ/インタプリタやライブラリのインストールだけでなく、プロジェクトの生成やプリコンパイルといった、提出によらずにすべてで行うべき工程はこのインストールスクリプトで行ってください
# ネットワークアクセスができるのはこのタイミングだけです
# 後述のコンパイルスクリプト、および実行コマンドではネットワークアクセスができないため、必要なファイルがインターネットにある場合はこのスクリプトでダウンロードを行っておいてください
#
# ここで記述されたスクリプトはbashに渡されて実行されます
# シェル変数などは通常通り使用可能ですが、コンパイルスクリプト、実行コマンドには引き継がれないので注意してください
# コンパイルスクリプトにおいては同様にbashで実行されるため、同じ内容を記述してください
# 実行コマンドはシェルを介さず直接起動されるため、環境変数の修正が必要な場合は後述のenvironmentを使用してください
#
# またイメージを最小化するために、インストール作業には必要だが最終成果物として不要なものは /tmp においてください
# インストールスクリプトが終了したあとで /tmp 以下のものは削除されます
install = '''
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y curl
sudo apt-get install -y --no-install-recommends build-essential curl libffi-dev libffi8ubuntu1 libgmp-dev libgmp10 libncurses-dev libncurses6 libtinfo6 llvm-15
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 BOOTSTRAP_HASKELL_GHC_VERSION=9.8.4 BOOTSTRAP_HASKELL_CABAL_VERSION=3.12.1.0 BOOTSTRAP_HASKELL_INSTALL_NO_STACK=1 sh
source ~/.ghcup/env
sudo apt-get install -y --no-install-recommends libgsl0-dev liblapack-dev libatlas-base-dev libglpk-dev
mkdir -p submission/app
cd submission
cat > submission.cabal <<'PKG_CABAL_EOF'
cabal-version: 3.4
name: submission
version: 0.1.0.0
synopsis: A Haskell program submitted to AtCoder
-- description:
license: NONE
author: submitter-anonymous
maintainer: NONE
-- copyright:
category: Competitive
build-type: Simple
-- extra-doc-files: CHANGELOG.md
-- extra-source-files:
common warnings
ghc-options: -Wall
flag atcoder
description: Indicates this is on the AtCoder judge server
default: False
manual: True
executable main
import: warnings
main-is: Main.hs
-- other-modules:
-- other-extensions:
build-depends:
Cabal ^>=3.14.2.0,
Cabal-syntax ^>=3.14.2.0,
QuickCheck ^>=2.16.0.0,
ac-library-hs ^>=1.5.2.0,
adjunctions ^>=4.4.3,
array ==0.5.8.0,
attoparsec ^>=0.14.4,
base ^>=4.19.2.0,
bifunctors ^>=5.6.2,
binary ^>=0.8.9.1,
bitvec ^>=1.1.5.0,
bytestring ^>=0.12.1.0,
comonad ^>=5.0.9,
containers ^>=0.6.8,
contravariant ^>=1.5.5,
deepseq ==1.5.1.0,
directory ^>=1.3.8.5,
distributive ^>=0.6.2.1,
exceptions ^>=0.10.7,
extra ^>=1.8,
fgl ^>=5.8.3.0,
filepath ^>=1.4.301.0,
flow ^>=2.0.0.9,
free ^>=5.2,
ghc-bignum ==1.3,
ghc-boot-th ==9.8.4,
ghc-prim ==0.11.0,
hashable ^>=1.5.0.0,
heaps ^>=0.4.1,
hmatrix ^>=0.20.2,
hmatrix-glpk ^>=0.19.0.0,
hmatrix-gsl ^>=0.19.0.1,
hmatrix-special ^>=0.19.0.0,
ilist ^>=0.4.0.1,
indexed-traversable ^>=0.1.4,
indexed-traversable-instances ^>=0.1.2,
integer-gmp ^>=1.1,
integer-logarithms ^>=1.0.4,
kan-extensions ^>=5.2.7,
lens ^>=5.3.5,
linear-base ^>=0.5.0,
list-t ^>=1.0.5.7,
massiv ^>=1.0.5.0,
megaparsec ^>=9.7.0,
monad-memo ^>=0.5.4,
mono-traversable ^>=1.0.21.0,
mtl ^>=2.3.1,
mutable-containers ^>=0.3.4.1,
mwc-random ^>=0.15.2.0,
parallel ^>=3.2.2.0,
parsec ^>=3.1.18.0,
parser-combinators ^>=1.3.0,
pretty ^>=1.1.3.6,
primitive ^>=0.9.1.0,
process ^>=1.6.25.0,
profunctors ^>=5.6.3,
psqueues ^>=0.2.8.1,
random ^>=1.2.1.3,
reflection ^>=2.1.9,
regex-tdfa ^>=1.3.2.4,
safe-exceptions ^>=0.1.7.4,
scientific ^>=0.3.8.0,
semialign ^>=1.3.1,
semigroupoids ^>=6.0.1,
split ^>=0.2.5,
stm ^>=2.5.3.1,
strict ^>=0.5.1,
strict-lens ^>=0.4.1,
tagged ^>=0.8.9,
template-haskell ==2.21.0.0,
text ^>=2.1.2,
tf-random ^>=0.5,
these ^>=1.2.1,
these-lens ^>=1.0.2,
time ^>=1.12.2,
transformers ^>=0.6.1.0,
trifecta ^>=2.1.4,
unboxing-vector ^>=0.2.0.0,
unix ==2.8.6.0,
unordered-containers ^>=0.2.20,
utility-ht ^>=0.0.17.2,
vector ^>=0.13.2.0,
vector-algorithms ^>=0.9.1.0,
vector-split ^>=1.0.0.4,
vector-stream ^>=0.1.0.1,
vector-th-unbox ^>=0.2.2,
wide-word ^>=0.1.7.1,
witherable ^>=0.5,
xhtml ^>=3000.2.2.1
hs-source-dirs: app
default-language: GHC2021
if flag(atcoder)
cpp-options: -DATCODER
PKG_CABAL_EOF
cat > cabal.project <<'CABAL_PROJECT_EOF'
packages: ./submission.cabal
constraints: bitvec +libgmp,
-- clock +llvm,
vector-algorithms +llvm
optimization: 2
package *
compiler: ghc
ghc-options: -fllvm -Wall
CABAL_PROJECT_EOF
cat > cabal.project.freeze <<'CABAL_PROJECT_FREEZE_EOF'
active-repositories: hackage.haskell.org:merge
constraints: any.Cabal ==3.14.2.0,
any.Cabal-syntax ==3.14.2.0,
any.OneTuple ==0.4.2,
any.QuickCheck ==2.16.0.0,
QuickCheck -old-random +templatehaskell,
any.StateVar ==1.2.2,
any.ac-library-hs ==1.5.2.0,
any.adjunctions ==4.4.3,
any.alex ==3.5.3.0,
any.ansi-terminal ==1.1.2,
ansi-terminal -example,
any.ansi-terminal-types ==1.1,
any.array ==0.5.8.0,
any.assoc ==1.1.1,
assoc -tagged,
any.atomic-primops ==0.8.8,
atomic-primops -debug,
any.attoparsec ==0.14.4,
attoparsec -developer,
any.base ==4.19.2.0,
any.base-orphans ==0.9.3,
any.bifunctors ==5.6.2,
bifunctors +tagged,
any.binary ==0.8.9.1,
any.bitvec ==1.1.5.0,
bitvec +simd,
any.blaze-builder ==0.4.3,
any.blaze-html ==0.9.2.0,
any.blaze-markup ==0.8.3.0,
any.bytestring ==0.12.1.0,
any.call-stack ==0.4.0,
any.case-insensitive ==1.2.1.0,
any.charset ==0.3.12,
any.clock ==0.8.4,
clock -llvm,
any.colour ==2.3.6,
any.comonad ==5.0.9,
comonad +containers +distributive +indexed-traversable,
any.containers ==0.6.8,
any.contravariant ==1.5.5,
contravariant +semigroups +statevar +tagged,
any.data-default ==0.8.0.1,
any.data-default-class ==0.2.0.0,
any.deepseq ==1.5.1.0,
any.directory ==1.3.8.5,
any.distributive ==0.6.2.1,
distributive +semigroups +tagged,
any.exceptions ==0.10.7,
any.extra ==1.8,
any.fgl ==5.8.3.0,
fgl +containers042,
any.filepath ==1.4.301.0,
any.fingertree ==0.1.6.1,
any.flow ==2.0.0.9,
flow -pedantic,
any.foldl ==1.4.18,
any.free ==5.2,
any.ghc-bignum ==1.3,
any.ghc-boot-th ==9.8.4,
any.ghc-prim ==0.11.0,
any.hashable ==1.5.0.0,
hashable -arch-native -random-initial-seed,
any.heaps ==0.4.1,
any.hmatrix ==0.20.2,
hmatrix -disable-default-paths -no-random_r -openblas,
any.hmatrix-glpk ==0.19.0.0,
hmatrix-glpk -disable-default-paths,
any.hmatrix-gsl ==0.19.0.1,
hmatrix-gsl -disable-default-paths +onlygsl,
any.hmatrix-special ==0.19.0.0,
hmatrix-special -safe-cheap,
any.ilist ==0.4.0.1,
any.indexed-traversable ==0.1.4,
any.indexed-traversable-instances ==0.1.2,
any.integer-gmp ==1.1,
any.integer-logarithms ==1.0.4,
integer-logarithms -check-bounds +integer-gmp,
any.invariant ==0.6.4,
any.kan-extensions ==5.2.7,
any.lens ==5.3.5,
lens -benchmark-uniplate -dump-splices +inlining -j +test-hunit +test-properties +test-templates +trustworthy,
any.linear-base ==0.5.0,
any.linear-generics ==0.2.3,
any.list-t ==1.0.5.7,
any.logict ==0.8.2.0,
any.massiv ==1.0.5.0,
massiv -unsafe-checks,
any.math-functions ==0.3.4.4,
math-functions +system-erf +system-expm1,
any.megaparsec ==9.7.0,
megaparsec -dev,
any.mmorph ==1.2.1,
any.monad-control ==1.0.3.1,
any.monad-memo ==0.5.4,
any.mono-traversable ==1.0.21.0,
any.mtl ==2.3.1,
any.mutable-containers ==0.3.4.1,
any.mwc-random ==0.15.2.0,
mwc-random -benchpapi,
any.optparse-applicative ==0.19.0.0,
optparse-applicative +process,
any.os-string ==2.0.7,
any.parallel ==3.2.2.0,
any.parsec ==3.1.18.0,
any.parser-combinators ==1.3.0,
parser-combinators -dev,
any.parsers ==0.12.12,
parsers +attoparsec +binary +parsec,
any.pretty ==1.1.3.6,
any.prettyprinter ==1.7.1,
prettyprinter -buildreadme +text,
any.prettyprinter-ansi-terminal ==1.1.3,
any.primitive ==0.9.1.0,
any.process ==1.6.25.0,
any.profunctors ==5.6.3,
any.psqueues ==0.2.8.1,
any.pvar ==1.0.0.0,
any.random ==1.2.1.3,
any.reducers ==3.12.5,
any.reflection ==2.1.9,
reflection -slow +template-haskell,
any.regex-base ==0.94.0.3,
any.regex-tdfa ==1.3.2.4,
regex-tdfa +doctest -force-o2,
any.rts ==1.0.2,
any.safe-exceptions ==0.1.7.4,
any.scheduler ==2.0.1.0,
any.scientific ==0.3.8.0,
scientific -integer-simple,
any.semialign ==1.3.1,
semialign +semigroupoids,
any.semigroupoids ==6.0.1,
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
any.semigroups ==0.20,
semigroups +binary +bytestring -bytestring-builder +containers +deepseq +hashable +tagged +template-haskell +text +transformers +unordered-containers,
any.split ==0.2.5,
any.splitmix ==0.1.2,
splitmix -optimised-mixer,
any.stm ==2.5.3.1,
any.storable-complex ==0.2.3.0,
any.storable-record ==0.0.7,
storable-record -buildtests +splitbase,
any.storable-tuple ==0.1,
storable-tuple +splitbase,
any.strict ==0.5.1,
any.strict-lens ==0.4.1,
any.system-cxx-std-lib ==1.0,
any.tagged ==0.8.9,
tagged +deepseq +transformers,
any.tasty ==1.5.3,
tasty +unix,
any.template-haskell ==2.21.0.0,
any.text ==2.1.2,
text -developer -extendedbenchmarks -pure-haskell +simdutf,
any.tf-random ==0.5,
any.th-abstraction ==0.7.1.0,
any.these ==1.2.1,
any.these-lens ==1.0.2,
any.time ==1.12.2,
any.transformers ==0.6.1.0,
any.transformers-base ==0.4.6,
transformers-base +orphaninstances,
any.transformers-compat ==0.7.2,
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
any.trifecta ==2.1.4,
any.unboxing-vector ==0.2.0.0,
unboxing-vector +mono-traversable,
any.unix ==2.8.6.0,
any.unliftio-core ==0.2.1.0,
any.unordered-containers ==0.2.20,
unordered-containers -debug,
any.utf8-string ==1.0.2,
any.utility-ht ==0.0.17.2,
any.vector ==0.13.2.0,
vector +boundschecks -internalchecks -unsafechecks -wall,
any.vector-algorithms ==0.9.1.0,
vector-algorithms +bench +boundschecks -internalchecks +llvm -unsafechecks,
any.vector-split ==1.0.0.4,
any.vector-stream ==0.1.0.1,
any.vector-th-unbox ==0.2.2,
any.void ==0.7.3,
void -safe,
any.wide-word ==0.1.7.1,
any.witherable ==0.5,
any.xhtml ==3000.2.2.1
index-state: hackage.haskell.org 2025-06-22T05:15:57Z
CABAL_PROJECT_FREEZE_EOF
echo "main = return () :: IO ()" > app/Main.hs
cabal v2-update
cabal v2-configure --flags="+atcoder"
# cabal v2-freeze
cabal v2-build --only-dependencies
rm app/Main.hs
'''
# キー: compile
# 型: 文字列
# 要否: 任意
# 説明: コンパイルスクリプト
# コンパイルを行う言語の場合はコンパイルコマンドを記入してください
#
# ここで記述されたスクリプトはbashに渡されて実行されます
# シェル変数などは通常通り使用可能ですが、実行コマンドには引き継がれないので注意してください
# 実行コマンドはシェルを介さず直接起動されるため、環境変数の修正が必要な場合は後述のenvironmentを使用してください
#
# コンパイルを行わない言語の場合は記述不要です
# ただしコンパイルを行う必要のない言語の場合でも、構文チェックなどをコンパイル代わりに行わせることが可能です
# 成功時に後述の object で指定するファイルが生成されるようにコマンドを記述してください
compile = '''
cd submission
source ~/.ghcup/env
cabal v2-build --offline && cp $(cabal list-bin main) ../
'''
# キー: object
# 型: 文字列
# 要否: 任意
# 説明: コンパイル成否を判断するためのファイルパス
# コンパイルが成功したかどうかの判定に行うファイルを/judgeからの相対パスで記入してください
# コンパイルの成否はこのファイルの存在で判定を行います
# コンパイラの出力内容や、コンパイラの終了コードでは判定を行いませんので注意してください
# またこの仕様を用いて、インタプリタ言語で構文チェックなどを行うことが可能です
# 例えばコンパイルコマンドとして構文チェックを行い、その成否に応じてここで指定するファイルを生成する/しないを行えば、インタプリタ言語でもコンパイルエラーで実行を中断させることが可能です
# 例: 'a.out'
# 'publish/Main'
# 'target/release/main'
object = 'main'
# キー: environment
# 型: テーブル
# テーブル内の各キー/値は環境変数1つを表し、キーには環境変数名を、値は文字列型で環境変数の内容を記述
# 要否: 任意
# 説明: 実行時の環境変数
# 実行はシェルを介さず直接実行されるためシェルと同じ方法では環境変数を設定できません
# そのため環境変数を修正する場合はenvironmentテーブル内にキー/値を記述してください
#
# デフォルトでは以下の環境変数が設定されています
# environment.PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
# environment.HOME = '/home/runner'
# environment.LANG = 'C.UTF-8'
# environment.ATCODER = '1'
#
# ここで指定する環境変数は実行時のみ影響するものです
# インストールスクリプト、コンパイルスクリプトには影響しません
# それぞれで環境変数を変更する場合はそれぞれのスクリプト内で直接変更するようにしてください
#
# また以下の文字列は実行直前にジャッジシステムによって置換されます:
# {memory:b} 問題のメモリ制限の数値(単位: バイト)
# {memory:kb} 問題のメモリ制限の数値(単位: KiB)
# {memory:mb} 問題のメモリ制限の数値(単位: MiB)
# インタプリタ言語など、環境変数によって実行環境の設定を行う場合に使用できます
# environment.HOGE = "fuga"
# environment.FOO = "bar"
# environment.max-memory = "{memory:mb}M"
# キー: execution
# 型: 配列
# 配列内の各要素は文字列で、実行コマンドとして渡される各引数
# 要否: 任意
# 説明: 実行コマンド
# 実行を行うときのコマンドを配列で指定してください
# 実行はオーバーヘッドを取り除くためにシェルなどを使わずに直接起動させます
# そのためシェルの構文などは一切使えません
# ただし以下の文字列は実行直前にジャッジシステムによって置換されます:
# {memory:b} 問題のメモリ制限の数値(単位: バイト)
# {memory:kb} 問題のメモリ制限の数値(単位: KiB)
# {memory:mb} 問題のメモリ制限の数値(単位: MiB)
# インタプリタ言語など、実行環境の設定を行う場合に使用できます
# 例: [ './a.out' ]
# [ './target/release/main' ]
# [ 'java', '-Xss{memory:mb}M', 'Main' ]
execution = [
'./main',
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment