質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

GHC

Glasgow Haskell Compiler(GHC) は Haskell コンパイラです 異なる複数のアーキテクチャのネイティブコードや、C言語へコンパイルする事ができます。

Q&A

解決済

1回答

3544閲覧

Stackでのモジュールインポート

MarineJewel

総合スコア10

Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

GHC

Glasgow Haskell Compiler(GHC) は Haskell コンパイラです 異なる複数のアーキテクチャのネイティブコードや、C言語へコンパイルする事ができます。

0グッド

0クリップ

投稿2018/04/11 23:41

前提・実現したいこと

Stackのghcでhsファイルのみでのコンパイルをする際にモジュールをインポートしたい。

発生している問題・エラーメッセージ

stack ghc echo.hs [1 of 1] Compiling Echo ( echo.hs, echo.o ) echo.hs:5:1: error: Could not find module ‘System’ Use -v to see a list of the files searched for. | 5 | import System | ^^^^^^^^^^^^^

該当のソースコード

『ふつうのHaskellプログラミング』内のサンプルコードを写したものです。

Haskell

1import System 2 3main = do args <- getArgs 4 putStrLn $ unwords args 5

試したこと

Haskell

1import Prelude

を最上部に追加してみたのですがエラーメッセージに変化は見られませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

(恐らくここに限らず『ふつうのHaskellプログラミング』の多くの箇所は)内容が古いようです。
System というモジュールは今の標準のパッケージ(baseと呼ばれています)には存在していません。
getArgsという関数はSystem.Environmentというモジュールにあります。

つまり????のように書き換えるのが正解です。

import System.Environment main = do args <- getArgs putStrLn $ unwords args

追記

依然として同様のエラーが発生するようであれば、「Use -v to see a list of the files searched for.」とエラーメッセージに書いてあるとおり、次のように実行してみてください。

bash

1# ハイフン2つの **後に** -v オプションを着けるのに注意! 2stack ghc -- -v echo.hs

下記のような出力から、GHCが管理しているパッケージがどこにインストールされているかわかるはずです。

... loading package database C:\Users\igrep\AppData\Local\Programs\stack\x86_64-windows\ghc-8.2.2\lib\package.conf.d loading package database S:\sr\snapshots\8a26ed14\pkgdb loading package database S:\sr\global-project.stack-work\install\c1f464f3\pkgdb ...

もしここに出てきたいずれかのパスに日本語が含まれている場合、特によくある、
「C:\Users<ユーザー名>...」の<ユーザー名>の箇所に含まれる場合、
https://teratail.com/questions/96307 と同様に日本語パスの問題にハマっている可能性が高いです。

その場合、手前味噌で恐縮ですが Haskellらしさって?「型」と「関数」の基本を解説!【第二言語としてのHaskell】の「Windowsのユーザー名が日本語になっていると失敗する」の節を参考に、
** LOCALAPPDATAを書き換えたり、日本語じゃない名前のユーザーを作るといった対応**をした上で、
**再度stack setup**してGHCをインストールし直してください。

投稿2018/04/11 23:53

編集2018/04/12 12:00
igrep

総合スコア428

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MarineJewel

2018/04/12 11:07

解答ありがとうございます。 試してみたのですがやはりnot findが出てしまいました。Stackではプロジェクトを作成しないとモジュールのインポートは出来ないのでしょうか?
igrep

2018/04/12 11:39

まさか。そんなはずはないです。base以外のパッケージを使う場合は確かに事前に `stack build`が必要だったりしますが、baseパッケージに関しては全く気にしなくてよいです。 手元で上記のソースを貼り付けて下記のコマンドを実行しても特に問題はありませんでした。 ``` > stack ghc echo.hs [1 of 1] Compiling Main ( echo.hs, echo.o ) Linking echo.exe ... ``` 私が上記のソースで綴りを間違えたというわけでもなさそうなので、あと問題があるとすればGHCが正しくインストールできていないぐらいしか思いつかないですね。。。 どんなコマンドを実行してどんなエラーが出ましたか? コンソールの入力と出力を改めて貼り付けてみてください。
MarineJewel

2018/04/12 16:20

何度か確認したところ、EnvironmentがEnviroment(つまり誤字)になっているのを見つけました…それを直すと無事コンパイル通りました。 原因はモジュール名だったようです。 詳しい回答をありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問