Difference between revisions of "Talk:GHC.Generics"
Jump to navigation
Jump to search
m |
m (Talk:Generics moved to Talk:GHC.Generics: Generalizing the Generics page to mention other libraries too.) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 11: | Line 11: | ||
infixr 6 :*: |
infixr 6 :*: |
||
data (:*:) f g p = f p :*: g p |
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. |
||
+ | |||
+ | --[[User:Dreixel|dreixel]] 17:39, 3 March 2012 (UTC) |
Latest revision as of 08:00, 21 April 2012
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)