
Like paolino, I did a couple tests and found:
data TreeX = Leaf Int | NotLeaf Int deriving (Show, Read)
[tommd@Mavlo Test]$ ./jtree Give me a tree: Leaf 5 jtree_code.c:2572: case fell off Aborted [tommd@Mavlo Test]$ ./jtree Give me a tree: NotLeaf jtree_code.c:2572: case fell off Aborted So the read for that does not work... but surprisingly...
data TreeX = Leaf Int | NotLeaf deriving (Show, Read)
Dropping the Int from the second constructor works (ignore the constructor names, they are just place-holders). [tommd@Mavlo Test]$ ./jtree Give me a tree: Leaf 43 Leaf 43 [tommd@Mavlo Test]$ ./jtree Give me a tree: NotLeaf NotLeaf --- OTHER TESTS --- 1) data TreeX = Leaf | NotLeaf 5 deriving (Show, Read) Another unfortunate bug is that reversing the constructors (having Leaf as a nullary constructor and NotLeaf taking an Int) causes compilation to fail (using jhc-0.7.2-0). 2) data TreeX = Leaf Int | NotLeaf Int | OoopsLeaf deriving (Show, Read) Works fine - notice it ends with a nullary constructor... Hypothesis 1: All working Read derivations have data declarations with a nullary constructor at the end. 3) data TreeX = Leaf Int | NotLeaf | OoopsLeaf Int deriving (Show, Read) Fails in with 'case fell off', so H1 seems good 4) data TreeX = Leaf Int | NotLeaf | OoopsLeaf deriving (Show, Read) Works. 5) data TreeX = Leaf | NotLeaf | OoopsLeaf Int deriving (Show, Read) Fails to compile. Hypothesis 2: All working Read derivations that don't cause compile issues have data declarations with non-nullary first constructors. Cheers, Thomas