On 2011-09-21 22:06, Brent Yorgey wrote:
On Tue, Sep 20, 2011 at 10:31:58PM -0400, Richard Cobbe wrote:
numVarRefs :: Term -> Integer
numVarRefs (view -> Var _) = 1
numVarRefs (view -> App rator rand) = numVarRefs rator + numVarRefs rand
numVarRefs (view -> Lam _ body) = numVarRefs body
-- numVarRefs (view -> _) = error "bogus"
This is a known limitation. Your particular example is perhaps not so
hard to figure out, but what if we had
view :: Bool -> Bool
view x = search for a counterexample to the Goldbach conjecture; if
one is found, return x, otherwise return False
foo (view -> False) = ...
But in Richard's example, all possible values of the result of view are handled.
For your foo example, the equivalent would be.
foo (view -> False) = ...
foo (view -> True) = ...
Ghc should be able to detect this case, and not issue a warning. All that needs
to be done is check if the function can be rewritten to
numVarRefs t = case view t of ...
Where ... is exhaustive.
Twan
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe