Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in / Register
  • GHC GHC
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 5,249
    • Issues 5,249
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
  • Merge requests 582
    • Merge requests 582
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Deployments
    • Deployments
    • Releases
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Glasgow Haskell CompilerGlasgow Haskell Compiler
  • GHCGHC
  • Issues
  • #481
Closed
Open
Issue created Nov 21, 2005 by Simon Peyton Jones@simonpjDeveloper

Recompilation check fails for TH

The recompilation check only recompiles a module when the interface of a module it imports changes. But with Template Haskell, it may need to be recompiled when the implementation changes.

Concrete example below. It's quite awkward to fix.

  • Perhaps a module that contains any splices should be recompiled always.
  • Perhaps a module that exports any TH stuff (how would we tell?) should be flagged as changed if anything about it changes.

Simon

The following scenario reproduces this error (thanks to Bulat Ziganshin bulatz@HotPOP.com):

  1. create Main.hs containing code
module Main where
import Sub
main = print $x

and Sub.hs containing code

module Sub where
x = [| 1 |]
  1. compile them with --make:
C:\!\Haskell\!>ghc --make -fth Main.hs
Chasing modules from: Main.hs
Compiling Sub              ( ./Sub.hs, ./Sub.o )
Compiling Main             ( Main.hs, Main.o )
Loading package base-1.0 ... linking ... done.
Loading package haskell98-1.0 ... linking ... done.
Loading package template-haskell-1.0 ... linking ... 
done.
Linking ...

C:\!\Haskell\!>main.exe
1
  1. now change Sub.hs to the following code:
module Sub where
x = [| 2 |]
  1. and recompile program:
C:\!\Haskell\!>ghc --make -fth Main.hs
Chasing modules from: Main.hs
Compiling Sub              ( ./Sub.hs, ./Sub.o )
Skipping  Main             ( Main.hs, Main.o )
Linking ...

C:\!\Haskell\!>main.exe
1

As you see, Main.hs is not recompiled despite the fact that definition of x is changed and now program must print "2"

Edited Mar 09, 2019 by Ian Lynagh <igloo@earth.li>
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
Time tracking