Ok, this all works as expected:λ> data Point = Point Float Float deriving (Show, Read)λ> Point 1.0 1.0Point 1.0 1.0λ> read "Point 1.0 1.0"*** Exception: Prelude.read: no parseλ> read "Point 1.0 1.0" :: PointPoint 1.0 1.0But now we add names to the values in the Point, and things change:λ> data Point = Point {x :: Float, y :: Float } deriving (Show, Read)λ> Point 1.0 1.0Point {x = 1.0, y = 1.0}