Haskell: Warning: Multiple files use the same module name:
1. Warning messages
* * * * * * * *
Warning: Multiple files use the same module name:
* Paths_h99 found at the following paths
* C:\Users\k\OneDrive\study\myhs\h99\.stack-work\dist\29cc6475\build\autogen\Paths_h99.hs (h99:lib)
* C:\Users\k\OneDrive\study\myhs\h99\.stack-work\dist\29cc6475\build\h99-exe\autogen\Paths_h99.hs (h99:exe:h99-exe)
* * * * * * * *
Vscode 에서 Haskelly plugin 을 사용하고 있는데, stack ghci --ghci-option *.hs 명령을 치자 위와 같은 에러가 갑자기 발생했다. 시점은 Windows 10 을 시스템 이미지 복원을 한 후에 stack 을 새로운 버전으로 다시 설치한 후부터고, stack ghci --ghci-options *.hs 명령을 치면 그렇다. 실행 파일이 두 개가 중복해서 생기고, autogen 이란 폴더 이름을 볼 때, 새로운 stack 에 자동으로 project 를 빌드하여 실행 파일을 만드는 기능이 추가된 것으로 생각된다.
2. 해결 방법
1) 이전 버전의 stack.exe 사용
$ stack --version
Version 2.5.1, Git revision d6ab86...d5 x86_64 hpack-0.33.0
새로 설치한 stack 의 버전은 위와 같이 나온다. 전에 보지 못 했던 지저분한 내용이 잔뜩 적혀 있다. git 과 hpack 이란 것이 그렇다. 새로 설치한 stack 버전만의 문제일 가능성이 매우 높으니 이전 버전으로 stack.exe 를 바꾸면 해결되지 않을까 하는 생각이 들었다. Haskell stack 이전 버전들을 다운로드 할 수 있는 github 페이지(링크)를 찾아서, 실험삼아 2.3.1 버전으로 현재 버전인 2.5.1 을 대체해보았더니 stack ghci --ghci-options *.hs 명령을 쳐도 이전과 같은 Warning message 가 뜨지 않는다. 일단 문제는 해결되었다.
2) 다른 해결 방법
비슷한 문제들에 대한 경험담과 해결책들이 인터넷에서 검색된다. 핵심은 hpack 이란 것이 other-modules 란 항목을 참조해서 테스트를 하는 과정에서 생겨나는 문제로 보고 있으며, 그 문제를 해결하기 위해서는 hpack 이 other-modules 항목을 참고하지 못 하도록 추가의 내용을 설정해준다는 것이다. 그런데 해결 방법에 대한 글을 읽어보면, stack.yaml, package.yaml, *.cabal 세 가지 파일 중에 어느 파일을 수정해야 하는지 별로 친절하게 구체적으로 설명해주지 않고 있다. other-modules 란 항목은 *.cabal 파일에만 적혀 있으니 cabal 파일을 건드리는 것 같기는 한데 정확하지 않아 이 해결 방법은 직접 해보지는 않았다. 혹시나 나중에 stack.exe 가 다시 버전 업이 되고 나서도 같은 문제가 생길 것을 대비하여 여기에 적어둔다.
* Stack new myproj produces warning with stack ghci: https://github.com/commercialhaskell/stack/issues/5439
* Do not include Paths_* when infering other-modules: https://github.com/sol/hpack/issues/303
when:
- condition: false
other-modules: Paths_*
</code?