Create a gist now

Instantly share code, notes, and snippets.

How to make ghc loop.
{-# LANGUAGE EmptyDataDecls #-}
data Empty
data Loop = CLoop (Loop -> Empty)
loop_step :: Loop -> Empty
loop_step b@(CLoop f) = f b
loop :: Empty
loop = loop_step (CLoop loop_step)
@sjoerdvisscher

It works fine if you turn Loop into a newtype.

@hesselink

You don't even need the EmptyDataDecls; changing Empty to () loops as well. Did you file a bug?

@sjoerdvisscher

Apparently this is a known bug of the inliner. Adding NOINLINE fixes the problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment