Personal tools

Talk:GHC.Generics

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(typo?)
 
m (Talk:Generics moved to Talk:GHC.Generics: Generalizing the Generics page to mention other libraries too.)
 
(3 intermediate revisions by 2 users not shown)
Line 2: Line 2:
   
   
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?
+
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
 
-- | Sums: encode choice between constructors
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)