It looks like you're new here. If you want to get involved, click one of these buttons!
Products in Hask.
Recall that Haskell has a built-in product (pair) type with constructors written:
data (a,b) = (a,b)
Implement isomorphisms of the following type signatures by drawing diagrams and translating them into code. Explain why the functions you have constructed are isomorphisms.
(a) swap :: (a,b) -> (b,a)
(b) unit :: a -> ((),a)
(c) assoc :: (a,(b,c)) -> ((a,b),c)
Comments
a)
b)
c)
a) > swap :: (a,b) -> (b,a) > swap (x,y) = (y,x) > swap $ swap (x,y) = swap (y,x) = (x,y) b) > unit a = ((), a) > unUnit ((), a) = a > (unUnit . unit) a = unUnit ((), a) = a > (unit . unUnit) ((),a) = unit a = ((),a) c) > assoc (x, (y,z)) = ((x,y),z) > unAssoc ((x,y),z) = (x, (y,z)) > (unAssoc . assoc) (x, (y,z)) = unAssoc ((x,y),z) = (x, (y,z))