diff --git a/anansi.cabal b/anansi.cabal
--- a/anansi.cabal
+++ b/anansi.cabal
@@ -1,5 +1,5 @@
 name: anansi
-version: 0.4.2
+version: 0.4.3
 license: GPL-3
 license-file: license.txt
 author: John Millikin <jmillikin@gmail.com>, Dirk Laurie <dirk.laurie@gmail.com>
@@ -32,7 +32,7 @@
 source-repository this
   type: bazaar
   location: https://john-millikin.com/branches/anansi/0.4/
-  tag: anansi_0.4.2
+  tag: anansi_0.4.3
 
 library
   hs-source-dirs: lib
diff --git a/lib/Anansi/Tangle.hs b/lib/Anansi/Tangle.hs
--- a/lib/Anansi/Tangle.hs
+++ b/lib/Anansi/Tangle.hs
@@ -180,7 +180,7 @@
 		S.put (TangleState newPos old)
 	putMacro = do
 		putPosition pos
-		lookupMacro name >>= mapM_ putContent
+		lookupMacro name pos >>= mapM_ putContent
 
 putPosition :: Monad m => Position -> TangleT m ()
 putPosition pos = do
@@ -193,9 +193,16 @@
 			TangleEnv _ format <- RWS.ask
 			RWS.tell (encodeUtf8 (format pos))
 
-lookupMacro :: Monad m => Text -> TangleT m [Content]
-lookupMacro name = do
+lookupMacro :: Monad m => Text -> Position -> TangleT m [Content]
+lookupMacro name pos = do
 	TangleEnv macros _ <- RWS.ask
 	case Data.Map.lookup name macros of
-		Nothing -> error ("unknown macro: " ++ show name)
+		Nothing -> error (concat
+			[ "unknown macro "
+			, show name
+			, " at "
+			, Data.Text.unpack (either id id (FP.toText (positionFile pos)))
+			, ":"
+			, show (positionLine pos)
+			])
 		Just content -> return content
diff --git a/lib/Anansi/Types.hs b/lib/Anansi/Types.hs
--- a/lib/Anansi/Types.hs
+++ b/lib/Anansi/Types.hs
@@ -35,9 +35,9 @@
 
 import           Control.Monad (liftM)
 import qualified Control.Monad.Reader as Reader
-import           Control.Monad.Reader (ReaderT, runReaderT)
+import           Control.Monad.Reader (ReaderT, EnvType, runReaderT)
 import qualified Control.Monad.Writer as Writer
-import           Control.Monad.Writer (Writer, execWriter)
+import           Control.Monad.Writer (Writer, WriterType, execWriter)
 import           Data.ByteString (ByteString)
 import qualified Data.Map
 import           Data.Map (Map)
@@ -106,12 +106,12 @@
 		unLoomM (f x)
 
 instance Reader.MonadReader LoomM where
-	type Reader.EnvType LoomM = LoomOptions
+	type EnvType LoomM = LoomOptions
 	ask = LoomM Reader.ask
 	local f (LoomM m) = LoomM (Reader.local f m)
 
 instance Writer.MonadWriter LoomM where
-	type Writer.WriterType LoomM = ByteString
+	type WriterType LoomM = ByteString
 	tell = LoomM . Writer.tell
 	listen (LoomM m) = LoomM (Writer.listen m)
 	pass m = LoomM (Writer.pass (unLoomM m))
