haskellcabalhunitcoderunner

"Could not find module ‘Test.HUnit’" Error when executing Haskell's unittest (HUnit) in CodeRunner


I have simple unit test code for Haskell's HUnit. I use Mac OS X 10.10, and I installed HUnit with cabal install hunit.

module TestSafePrelude where

import SafePrelude( safeHead )
import Test.HUnit

testSafeHeadForEmptyList :: Test
testSafeHeadForEmptyList = 
    TestCase $ assertEqual "Should return Nothing for empty list"
                           Nothing (safeHead ([]::[Int]))

testSafeHeadForNonEmptyList :: Test
testSafeHeadForNonEmptyList =
    TestCase $ assertEqual "Should return (Just head) for non empty list" (Just 1)
               (safeHead ([1]::[Int]))

main :: IO Counts
main = runTestTT $ TestList [testSafeHeadForEmptyList, testSafeHeadForNonEmptyList]

I can execute it with runhaskell TestSafePrelude.hs to get the results:

Cases: 2  Tried: 2  Errors: 0  Failures: 0
Counts {cases = 2, tried = 2, errors = 0, failures = 0}

However, when I run it in Code Runner, I have error message that can't find the HUnit module.

enter image description here

CodeRunner launches the test on a different shell environment, and this seems to be the issue. If so, what environment variables need to be added? If not, what might be causing the problem?

enter image description here

I also find that ghc-pkg list from the CodeRunner does not search for the directories in ~/.ghc which contains the HUnit.

/usr/local/Cellar/ghc/7.8.3/lib/ghc-7.8.3/package.conf.d:
    Cabal-1.18.1.4
    array-0.5.0.0
    ...
    xhtml-3000.2.1

This is the results when executed in shell:

/usr/local/Cellar/ghc/7.8.3/lib/ghc-7.8.3/package.conf.d
   Cabal-1.18.1.4
   array-0.5.0.0
   ...
/Users/smcho/.ghc/x86_64-darwin-7.8.3/package.conf.d
   ...
   HUnit-1.2.5.2
   ...
   zlib-0.5.4.2

I added both ~/.cabal and ~/.ghc in the path, but it doesn't work.


Solution

  • The problem was the $HOME setup change. I used different $HOME for CodeRunner, but Haskell searches for $HOME/.cabal and $HOME/.ghc for installed package.

    After my resetting $HOME to correct location, everything works fine.