The most basic declaration is
module MyModule where
foo x = 1 + x
bar x = foo (foo x)
If you omit an export list then everything in the module is available to the outside world. Typically you want to limit the exports to provide encapsulation and this is accomplished by explicitly naming the modules you want to expose. In the example below only
bar
is exported, foo is private to this module.
module MyModule (bar) where
foo x = 1 + x
bar x = foo (foo x)
Note that a module name must correspond to the file name of the haskell source, so the above must be in a file called MyModule.hs.
To relate modules to each other the import directive is used.