Haskell -- suppress import errors

Viewed 116

I have a bunch of Haskell files I need to compile with GHC, but some import libraries that don't exist. Is there a way to suppress the compiler error: Could not find module, and only make it throw during runtime? Something like -fdefer-type-errors does, but for imports.

Editing the files is not an option at the moment, and most imports are not even used by the program, so would never throw if it compiled.

2 Answers

You can use cabal's mixins to expose other, existing, modules with the names of the modules you desire to exist. For example you might have a file:

module MyLib (someFunc) where

import Module1
import Module2

someFunc :: IO ()
someFunc = putStrLn "someFunc"

So Module1 and Module2 do not actually exist. But you can point those modules to anything, such as Data.Map and Data.Set using the cabal file:

library
    exposed-modules:  MyLib

    -- Modules included in this library but not exported.
    -- other-modules:

    -- LANGUAGE extensions used by modules in this package.
    -- other-extensions:
    build-depends:    base ^>=4.14.0.0, containers
    hs-source-dirs:   src
    default-language: Haskell2010
    mixins:
        containers (Data.Map as Module1, Data.Set as Module2)

There is no option in GHC that allows compilation when an imported module can not be found.

Related