Ah, yes, I was able to reproduce the issue. Like you, I'm surprised that the other examples were working, with a datatype constructor that takes a function as an argument! That's the sort of higher-order stuff that confuses the compiler in general, and you were just getting lucky with various program analyses being smart enough. With the [query] call, you can see the effectful pattern match that confuses the compiler, by passing the '-dumpSource' command-line option.

However, the problem is easy to fix by replacing in state.ur the definition
  datatype state st a = State of (st -> S.m (st * a))
with
  type state st a = st -> S.m (st * a)

That is, just use a type synonym instead of a datatype. Other parts of the signature and its implementation must be changed, but it's pretty straightforward.

I hope there are no objections to satisfying the compiler by simplifying the program in this way. :)

On 08/15/2014 04:51 AM, Sergey Mironov wrote:
I've re-checked the compiler verison. Looks like it is correct.
Originally, the last failed [query] call was commented out, may it be
the source of confusion? I've remove that comment so XmlGen now fails
as is. Could you please try again?
[...]

[3] - https://github.com/grwlf/urweb-monad-pack (the whole project)

_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to