diff --git a/compiler/deSugar/DsCCall.hs b/compiler/deSugar/DsCCall.hs
index b90dd80965984114252ed6f2a07f69979711b14f..2a5769f6e2594340d3b88721351554535c98a3ff 100644
--- a/compiler/deSugar/DsCCall.hs
+++ b/compiler/deSugar/DsCCall.hs
@@ -343,7 +343,7 @@ resultWrapper result_ty
   -- Data types with a single constructor, which has a single arg
   -- This includes types like Ptr and ForeignPtr
   | Just (tycon, tycon_arg_tys) <- maybe_tc_app
-  , Just data_con <- isDataProductTyCon_maybe tycon  -- One construtor, no existentials
+  , Just data_con <- isDataProductTyCon_maybe tycon  -- One constructor, no existentials
   , [unwrapped_res_ty] <- dataConInstOrigArgTys data_con tycon_arg_tys  -- One argument
   = do { dflags <- getDynFlags
        ; (maybe_ty, wrapper) <- resultWrapper unwrapped_res_ty
diff --git a/compiler/rename/RnNames.hs b/compiler/rename/RnNames.hs
index 6dc9f1d0d226896cb55b5b065a9e08ab55a72c92..6197bc7480f5ef6bde0075d7f3516b24fbc9f56f 100644
--- a/compiler/rename/RnNames.hs
+++ b/compiler/rename/RnNames.hs
@@ -762,7 +762,7 @@ The situation is made more complicated by associated types. E.g.
 Then M's export_avails are (recall the AvailTC invariant from Avails.hs)
   C(C,T), T(T,T1,T2,T3)
 Notice that T appears *twice*, once as a child and once as a parent. From
-this list we construt a raw list including
+this list we construct a raw list including
    T -> (T, T( T1, T2, T3 ), Nothing)
    T -> (C, C( C, T ),       Nothing)
 and we combine these (in function 'combine' in 'imp_occ_env' in
@@ -1228,7 +1228,7 @@ warnMissingSignatures gbl_env
 {-
 Note [The ImportMap]
 ~~~~~~~~~~~~~~~~~~~~
-The ImportMap is a short-lived intermediate data struture records, for
+The ImportMap is a short-lived intermediate data structure records, for
 each import declaration, what stuff brought into scope by that
 declaration is actually used in the module.
 
diff --git a/compiler/vectorise/Vectorise/Exp.hs b/compiler/vectorise/Vectorise/Exp.hs
index 5ca77b8ffe2c015876023146974867bc77676de6..f4c1361d74ed915a749761e3d56f68568c82e650 100644
--- a/compiler/vectorise/Vectorise/Exp.hs
+++ b/compiler/vectorise/Vectorise/Exp.hs
@@ -655,7 +655,7 @@ mkScalarFun arg_tys res_ty expr
 -- In other words, all methods in that dictionary are scalar functions — to be vectorised with
 -- 'vectScalarFun'.  The dictionary "function" itself may be a constant, though.
 --
--- NB: You may think that we could implement this function guided by the struture of the Core
+-- NB: You may think that we could implement this function guided by the structure of the Core
 --     expression of the right-hand side of the dictionary function.  We cannot proceed like this as
 --     'vectScalarDFun' must also work for *imported* dfuns, where we don't necessarily have access
 --     to the Core code of the unvectorised dfun.
diff --git a/libraries/ghci/GHCi/InfoTable.hsc b/libraries/ghci/GHCi/InfoTable.hsc
index 8a9dfc2fa06990e0ccc287727f16f1e206cf25fe..c553897b686ac070870848c5eb71e94113124263 100644
--- a/libraries/ghci/GHCi/InfoTable.hsc
+++ b/libraries/ghci/GHCi/InfoTable.hsc
@@ -17,10 +17,10 @@ module GHCi.InfoTable
 import Data.Maybe (fromJust)
 #endif
 import Foreign
-import Foreign.C
-import GHC.Ptr
-import GHC.Exts
-import System.IO.Unsafe
+import Foreign.C -- needed for 2nd stage
+import GHC.Ptr -- needed for 2nd stage
+import GHC.Exts -- needed for 2nd stage
+import System.IO.Unsafe -- needed for 2nd stage
 
 type ItblCodes = Either [Word8] [Word32]
 
@@ -33,7 +33,7 @@ type HalfWord = Word32
 #elif SIZEOF_VOID_P == 4
 type HalfWord = Word16
 #else
-#error Uknown SIZEOF_VOID_P
+#error Unknown SIZEOF_VOID_P
 #endif
 
 type EntryFunPtr = FunPtr (Ptr () -> IO (Ptr ()))