Is it common to use the same name for the data type and value constructor in Haskell?

From my limited experience: Yes. It makes sense, too. Why would you call Point differently here? It perfectly describes the data type and is also clear to use for pattern matching like this

myFunc :: Point -> Bool
myFunc (Point 0 0) = True
myFunc _ = False

It is unambiguous since you can only put the data type in the type signature of the function.


This is not a direct answer, but a tip for people with the same question.

Syntax highlighting may help with the distinction between the two. For example a screenshot of some of the code mentioned before, from Visual Studio Code with a Haskell Syntax Highlighting extension (with customized color coding):

Haskell syntax highlighting

Not everybody seems to agree with the accepted answer, by the way. See for example this short post, as well as this r/haskell discussion about it.