Talk:GHC.Generics
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Why does the definition of (:+:) use the pipe character "|", but the definition of (:*:) uses the ":*:" operator?
Is that a typo (copied from http://www.haskell.org/ghc/docs/7.4.1/html/users_guide/generic-programming.html), or is there a reason for the difference?
-- | Sums: encode choice between constructors infixr 5 :+: data (:+:) f g p = L1 (f p) | R1 (g p)
-- | Products: encode multiple arguments to constructors infixr 6 :*: data (:*:) f g p = f p :*: g p
Is it just fallout from of "asymmetry" in Haskell language spec,
where Sum types need the pipe to separate the alternations,
but Product types are written with the factors simply adjacent without a separator? (and then it looks pretty to use infix constructor "+351916292294" instead of a prefix constructor "P")
Yes, the pipe separates different constructors of a datatype, and the (:*:) is an infix constructor.
--dreixel 17:39, 3 March 2012 (UTC)