How can I write a type declaration and function in Haskell that takes either a function (that itself takes no arguments) *or* a value. When given a function it calls the function. When given a value it returns the value.

**[edit]** To give more context, I'm mostly curious how to solve this problem in Haskell without bit twiddling: [Designing function f(f(n)) == -n](https://stackoverflow.com/questions/731832/interview-question-ffn-n)

Sean