haskell-jp / beginners #17 at 2021-07-16 18:09:05 +0900

example15.hs:1:1: error:
    Could not find module 'Monad'
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
1 | import Monad
  | ^^^^^^^^^^^^

example15.hs:2:1: error:
    Could not find module 'System'
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
2 | import System
  | ^^^^^^^^^^^^^

example15.hs:3:1: error:
    Could not find module 'IO'
    Perhaps you meant Id (needs flag -package-key ghc-8.10.4)
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
3 | import IO
  | ^^^^^^^^^

example15.hs:4:1: error:
    Could not find module 'Random'
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
4 | import Random
  | ^^^^^^^^^^^^^

このようなエラーが出ます。
何かがうまく行ってないのですが、cabalを編集しても全くうまくいきません。
助けてください。
なんかのコードを参考にしたんですかね?
Monad ってモジュールはなく、 Control.Monad モジュールはありますけど。それとも自身で定義したモジュールですか?
Haskell98 時代の標準モジュールですよね。私も長らく Haskell に触ってないのでそのころのソースコードを久々にいじったりするとハマるのですが、いまどきはもう import 文を書き直すしかないのでしょうかね?
1. 端的に言うと参考にしている資料が古いです。MonadとかSystemとかIOなどはHaskell 98時代の古いモジュール名で、GHC 7.10(2015年リリース)以降では使えなくなっています。
2. 対処方法としては、Monad→Control.Monad, System→System.Exit/System.Environment, IO→, Random→(randomパッケージの)System.Randomという風に書き換えます。
3. かつては(GHC 7.8までは)古いモジュール名を使えるようにするパッケージ "haskell98" がGHCに添付されていましたが、GHC 7.10以降はそれがなくなりました。Hackageに上がっているhaskell98パッケージもGHC 7.8までの対応のようです。
Example15.hs:4:1: error:
    Could not find module 'System.Random'
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
4 | import System.Random
  | ^^^^^^^^^^^^^^^^^^^^

System.Randomって非公式なんですか?
何もわからなくてすみません。
私のこの記事は参考になりますか?
https://qiita.com/TTsurutani/items/b68956a555747fc3cb0e
記事の通りに`stack install random`したのですが
sirkerf:yaminabe sirkerf$ stack install random
/Users/sirkerf/Desktop/programming/Haskell/haskell_sutdy/yaminabe/yaminabe.cabal was modified manually. Ignoring /Users/sirkerf/Desktop/programming/Haskell/haskell_sutdy/yaminabe/package.yaml in favor of the cabal file.
If you want to use the package.yaml file instead of the cabal file,
then please delete the cabal file.
Unable to parse cabal file from package /Users/sirkerf/Desktop/programming/Haskell/haskell_sutdy/yaminabe/yaminabe.cabal

- 41:14: 
unexpected '.'
expecting "-", white space, ":", opening paren, operator, comma or end of input

となってうまくいきませんでした。
Could not find module 'System.Random' などのエラーが出る時って、どうやってビルドしてますか?
stack build です?
stack build です。
stack build しているディレクトリに package.yaml.cabal が拡張子のファイルはありますか?
pakcage.yaml.yaml が拡張子のファイルがあります。
であれば、`package.yaml` の dependencies というとこに random を追記するとビルドできるかと
うーむ、できないようです……。
別件でXcodeが消えて再ダウンロード不可能というトラブルも発生してしまったので、一旦この問題は保留とさせてください。質問した上に回答までいただいたのに申し訳ありません。