stack ghciで読み込まれるファイルはcabalファイルで設定する


このエントリーをはてなブックマークに追加

関数型プログラムを触ってみたかったのでHaskellをやってみている
CentOSでHaskellプログラミング始め

で、すごいH本を読み終えたので次に関数プログラミング実践入門
を読んで見てる

で、第三章の関数定義のところでghciにファイルをロードするところがでてくるが

Haskellを使うのにstackを使っていると stack ghciとすることで、プロジェクトのディレクトリからhsファイルをロードすることができるのだが
そのままだと、基本的には最初から生成されているMain.hsがロードされる

(stackは以下qiitaの記事がわかりやすいかと)
Haskellのビルドツール”stack”の紹介
Stackでやる最速Haskell Hello world! (GHCのインストール付き!)

例えばSample.hsをロードしたい場合


Main.hsではなく、自分で作成したファイル(例えば projectDir/src/Sample.hs)をロードしたいと思ったら
projectDir/projectName.cabal のcabalファイルを修正してやればよい

例えば、stack new projectName simpleで新しいプロジェクトを作ると、cabalファイルは以下のようになる

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
name: projectName
version: 0.1.0.0
synopsis: Simple project template from stack
description: Please see README.md
homepage: https://github.com/githubuser/third-project#readme
license: BSD3
license-file: LICENSE
author: Author name here
maintainer: example@example.com
copyright: 2016 Author name here
category: Web
build-type: Simple
cabal-version: >=1.10
executable projectName
hs-source-dirs: src
main-is: Main.hs
default-language: Haskell2010
build-depends: base >= 4.7 && < 5

この時、executable projectNameの main-is: がMain.hsになっているので
ここをSample.hsとしてやって、srcディレクトリに自分でSample.hsファイルを作成してやれば

stack ghciコマンドをした時にSample.hsがロードされる

まぁ、こういうことしなくてもコンソールでghciする際にロードするファイルを引数で指定してやればいいだけなのはあるが

ghci src/Sample.hs

cabalファイルの中身を知っておくのも良いかと思う


このエントリーをはてなブックマークに追加