# Category theory/Natural transformation

### From HaskellWiki

< Category theory(Difference between revisions)

EndreyMark (Talk | contribs) (In fact, even has a more general type (Integral a => a -> Bool) than described here) |
EndreyMark (Talk | contribs) m (Rephrasings) |
||

Line 13: | Line 13: | ||

</haskell> |
</haskell> |
||

− | === Vertical arrows === |
+ | === Vertical arrows: sides of objects === |

+ | |||

+ | … showing the operation of the natural transformation. |
||

:<math>\eta : \Phi \to \Psi</math> |
:<math>\eta : \Phi \to \Psi</math> |
||

<haskell>maybeToList :: Maybe a -> [a]</haskell> |
<haskell>maybeToList :: Maybe a -> [a]</haskell> |
||

+ | |||

+ | ==== Left: side of X object ==== |
||

{| Border=2 CellPadding=2 CellSpacing=2 | Dia |
{| Border=2 CellPadding=2 CellSpacing=2 | Dia |
||

Line 32: | Line 34: | ||

| <hask>[1]</hask> |
| <hask>[1]</hask> |
||

|} |
|} |
||

+ | |||

+ | ==== Right: side of Y object ==== |
||

{| Border=2 CellPadding=2 CellSpacing=2 | Dia |
{| Border=2 CellPadding=2 CellSpacing=2 | Dia |
||

Line 48: | Line 52: | ||

|} |
|} |
||

− | === Horizontal arrows === |
+ | === Horizontal arrows: sides of functors === |

− | |||

− | /Note: <hask>even</hask> has a more general type (<hask>Integral a => a -> Bool</hask>) than described here/ |
||

:<math>f : X \to Y</math> |
:<math>f : X \to Y</math> |
||

Line 54: | Line 58: | ||

even :: Int -> Bool |
even :: Int -> Bool |
||

</haskell> |
</haskell> |
||

+ | |||

+ | ==== Side of \Phi functor ==== |
||

{| Border=2 CellPadding=2 CellSpacing=2 |
{| Border=2 CellPadding=2 CellSpacing=2 |
||

Line 69: | Line 75: | ||

| <hask>Just False</hask> |
| <hask>Just False</hask> |
||

|} |
|} |
||

+ | |||

+ | ==== Side of \Psi functor ==== |
||

{| Border=2 CellPadding=2 CellSpacing=2 |
{| Border=2 CellPadding=2 CellSpacing=2 |
||

Line 104: | Line 112: | ||

| <hask>[False]</hask> |
| <hask>[False]</hask> |
||

|} |
|} |
||

+ | |||

+ | === Remarks === |
||

+ | |||

+ | * <hask>even</hask> has a more general type (<hask>Integral a => a -> Bool</hask>) than described here |
||

+ | * Words “side”, “horizontal”, “vertical”, “left”, “right” serve here only to point to the discussed parts of a diagram, thus, they are not part of the scientific terminology. |

## Revision as of 19:41, 2 October 2006

## Contents |

## 1 Example: maybeToList

maybeToList

map even $ maybeToList $ Just 5

yields the same as

maybeToList $ map even $ Just 5

yields: both yield

[False]

### 1.1 Vertical arrows: sides of objects

… showing the operation of the natural transformation.

maybeToList :: Maybe a -> [a]

#### 1.1.1 Left: side of X object

maybeToList :: Maybe Int -> [Int] | |

Nothing |
[] |

Just 0 |
[0] |

Just 1 |
[1] |

#### 1.1.2 Right: side of Y object

maybeToList :: Maybe Bool -> [Bool] | |

Nothing |
[] |

Just True |
[True] |

Just False |
[False] |

### 1.2 Horizontal arrows: sides of functors

even :: Int -> Bool

#### 1.2.1 Side of \Phi functor

map even:: Maybe Int -> Maybe Bool | |

Nothing |
Nothing |

Just 0 |
Just True |

Just 1 |
Just False |

#### 1.2.2 Side of \Psi functor

map even:: [Int] -> [Bool] | |

[] |
[] |

[0] |
[T]rue |

[1] |
[F]alse |

### 1.3 Commutativity of diagram

map even . maybeToList |
maybeToList . map even | |

Nothing |
[] |
[] |

Just 0 |
[True] |
[True] |

Just 1 |
[False] |
[False] |

### 1.4 Remarks

- has a more general type (even) than described hereIntegral a => a -> Bool
- Words “side”, “horizontal”, “vertical”, “left”, “right” serve here only to point to the discussed parts of a diagram, thus, they are not part of the scientific terminology.