File names with “meaningful” suffixes (e.g.,
.lhs
or .o
) cause the
“right thing” to happen to those files.
.hs
A Haskell module.
.lhs
A “literate Haskell” module.
.hi
A Haskell interface file, probably compiler-generated.
.hc
Intermediate C file produced by the Haskell compiler.
.c
A C file not produced by the Haskell compiler.
.s
An assembly-language source file, usually produced by the compiler.
.o
An object file, produced by an assembler.
Files with other suffixes (or without suffixes) are passed straight to the linker.