File names with “meaningful” suffixes (e.g.,
.lhs or .o) cause the
“right thing” to happen to those files.
.hsA Haskell module.
.lhs
A “literate Haskell” module.
.hsppA file created by the preprocessor.
.hiA Haskell interface file, probably compiler-generated.
.hcIntermediate C file produced by the Haskell compiler.
.cA C file not produced by the Haskell compiler.
.llAn llvm-intermediate-language source file, usually produced by the compiler.
.bcAn llvm-intermediate-language bitcode file, usually produced by the compiler.
.sAn assembly-language source file, usually produced by the compiler.
.oAn object file, produced by an assembler.
Files with other suffixes (or without suffixes) are passed straight to the linker.