I have two .hs files: one contains a new type declaration, and the other uses it.
first.hs:
module first () where
type S = SetType
data SetType = S[Integer]
second.hs:
module second () where
import first
When I run second.hs, both modules first, second are loaded just fine.
But, when I write :type
S on Haskell platform, the following error appears
Not in scope : data constructor 'S'
Note: There are some functions in each module for sure, I'm just skipping it for brevity
module first () where
Assuming in reality the module name starts with an upper case letter, as it must, the empty export list - ()
- says the module doesn't export anything, so the things defined in First
aren't in scope in Second
.
Completely omit the export list to export all top-level bindings, or list the exported entities in the export list
module First (S, SetType(..)) where
(the (..)
exports also the constructors of SetType
, without that, only the type would be exported).
And use as
module Second where
import First
foo :: SetType
foo = S [1 .. 10]
or, to limit the imports to specific types and constructors:
module Second where
import First (S, SetType(..))
You can also indent the top level,
module Second where
import First
foo :: SetType
foo = S [1 .. 10]
but that is ugly, and one can get errors due to miscounting the indentation easily.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With