<div dir="ltr">As per user guide one of the restriction in annotating value is<div>    . The binder being annotated must be declared in the current module</div><div><br></div><div>But when I use TH to generate the annotation above restriction is not respected.</div><div>Below is the minimal test case to reproduce the issue</div><div><br></div><div>---- Ann.hs</div><div><br></div><div><div>{-# LANGUAGE TemplateHaskell #-}</div><div>module Ann where</div><div><br></div><div>import <a href="http://Language.Haskell.TH">Language.Haskell.TH</a></div><div><br></div><div>-- {-# Ann id "Orphan Ann for id" #-}  -- <b>Rightly produces error "Not in scope: ‘id’"</b></div><div><br></div><div>$(pragAnnD (ValueAnnotation 'id) [|"Orphan Ann for id"|] >>= return . return) --<b> Ideally this should have produced same error as above</b></div><div>---- End of Ann.hs</div></div><div><br></div><div>---- Main.hs</div><div><br></div><div><div>{-# LANGUAGE TemplateHaskell #-}</div><div>module Main where</div><div><br></div><div>import Ann ()</div><div>import <a href="http://Language.Haskell.TH">Language.Haskell.TH</a></div><div><br></div><div>ann :: [String]</div><div>ann = $((reifyAnnotations (AnnLookupName 'id) :: Q [String]) >>= (\anns -> [|anns|]))</div><div>--err = 'a' && True  -- Uncomment to introduce compile error</div><div>main :: IO ()</div><div>main = print ann</div></div><div> </div><div>---- End of Main.hs</div><div><br></div><div>Also there is another bug in reifying the Orphan Annotations.</div><div>In the above example Main.hs depends on Ann.hs which defines Annotation for `id`</div><div>When Main.hs compiles fine in the first go, its is able to retrieve the annotation for `id`</div><div>Instead, if Ann.hs compiled successfully and Main.hs failed to compile and when you later fix the Main.hs error, it is not able to retrieve that annotation without recompiling Ann.hs</div><div><br></div><div>Regards,</div><div>Magesh B</div><div><br></div></div>