Синтаксис записи Haskell многими считается бородавкой на иначе элегантном языке из-за его уродливого синтаксиса и загрязнения пространства имен. С другой стороны, это часто более полезно, чем альтернатива, основанная на позиции.
Вместо объявления вроде этого:
data Foo = Foo {
fooID :: Int,
fooName :: String
} deriving (Show)
Мне кажется, что что-то в этом направлении было бы более привлекательным:
data Foo = Foo id :: Int
name :: String
deriving (Show)
Я уверен, что должна быть хорошая причина, по которой я отсутствую, но почему синтаксис C-подобной записи был принят более чистым макетным подходом?
Во-вторых, есть ли что-нибудь в конвейере для решения проблемы пространства имен, поэтому мы можем написать id foo
вместо fooID foo
в будущих версиях Haskell? (В дополнение к обходным методам, основанным на методе longwinded type class, доступных в настоящее время.)