сейчас выяснил, что Хаскель, оказывается позволяет вот такой синтаксис:
data Foo a = (:/:) { first :: a, second :: a }
т.е. можно
> let x = 1 :/: 2
> x
(:/:) {first = 1, second = 2}
> first x
1
значит, в Prelude можно было бы написать и
data [a] = [] | (:) { head :: a, tail :: [a] }
забавно.
data Foo a = (:/:) { first :: a, second :: a }
т.е. можно
> let x = 1 :/: 2
> x
(:/:) {first = 1, second = 2}
> first x
1
значит, в Prelude можно было бы написать и
data [a] = [] | (:) { head :: a, tail :: [a] }
забавно.