Another minor thing that happens to annoy me very much is how everything about Haskell's syntax and standard conventions is so diff-unfriendly.
To see what I mean, I picked the first "official" example I could find. Here are a few lines of code from the one of the examples in the Haskell playground (https://play.haskell.org/ -- it seems to pick a random one each time you load it):
data Visitor
= Member Profile
| NonMember (Maybe T.Text)
deriving Show
data Profile =
Profile
{ name :: T.Text
, birthday :: Time.Day
} deriving Show
You see Haskell code like this all the time, and the (IMO old-fashioned) lack of an optional trailing comma practically forces you into something like this. But just imagine inserting another variant to Visitor before Member, or removing the name field from Profile!A more practically minded language might allow a syntax like this:
data Visitor =
| Member Profile
| NonMember (Maybe T.Text)
deriving Show
data Profile = Profile {
name :: T.Text,
birthday :: Time.Day,
} deriving Show
Bamm, each line is identical, editing is easy, diffs are clean. TypeScript, for example, has something like this for union types. Haskell unfortunately doesn't.