
#13035: GHC enters a loop when partial type signatures and advanced type level code mix -------------------------------------+------------------------------------- Reporter: xcmw | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.0.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by RyanGlScott): FWIW, I don't think this is causing the typechecker to loop, but rather it causes it to take an extremely long time to complete. I discovered this by trying to minimize the test case by commenting some lines in the definition of `RecipeT`: {{{#!hs type RecipeT = Name =: String $ Author =: String {- $ Image =: String $ Description =: String $ CookTime =: Maybe Int $ PrepTime =: Maybe Int $ TotalTime =: Maybe Int $ Yield =: String -} $ Nutrition =: NutritionRec {- $ Tags =: [String] $ Url =: String -} $ GNone }}} When I compiled this, it lagged noticeably, but it completed in finite time: {{{ $ time /opt/ghc/8.0.1/bin/ghc -fforce-recomp Wat.hs[1 of 1] Compiling Wat ( Wat.hs, Wat.o ) Wat.hs:140:28: warning: [-Wpartial-type-signatures] • Found type wildcard ‘_’ standing for ‘'['Author]’ • In the type signature: g :: MyRec RecipeFormatter _ • Relevant bindings include g :: MyRec RecipeFormatter '['Author] (bound at Wat.hs:141:1) real 0m1.973s user 0m1.940s sys 0m0.028s }}} I then uncommented one more line (`Image := String`): {{{#!hs type RecipeT = Name =: String $ Author =: String $ Image =: String {- $ Description =: String $ CookTime =: Maybe Int $ PrepTime =: Maybe Int $ TotalTime =: Maybe Int $ Yield =: String -} $ Nutrition =: NutritionRec {- $ Tags =: [String] $ Url =: String -} $ GNone }}} And that contributed to the compilation time significantly (almost doubling it): {{{ $ time /opt/ghc/8.0.1/bin/ghc -fforce-recomp Wat.hs[1 of 1] Compiling Wat ( Wat.hs, Wat.o ) Wat.hs:140:28: warning: [-Wpartial-type-signatures] • Found type wildcard ‘_’ standing for ‘'['Author]’ • In the type signature: g :: MyRec RecipeFormatter _ • Relevant bindings include g :: MyRec RecipeFormatter '['Author] (bound at Wat.hs:141:1) real 0m3.635s user 0m3.564s sys 0m0.068s }}} Similarly, uncommented out more and more lines seems to approximately double the compilation time for each line. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13035#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler