mirror of
https://github.com/hmemcpy/milewski-ctfp-pdf.git
synced 2024-11-25 18:55:36 +03:00
Adjusting text
This commit is contained in:
parent
9a42998480
commit
5d124f49a0
@ -39,7 +39,9 @@ is indeed a category.
|
||||
An easier way to think about bifunctors would be to consider them functors in
|
||||
each argument separately. So instead of translating functorial laws ---
|
||||
associativity and identity preservation --- from functors to bifunctors,
|
||||
it would be enough to check them separately for each argument. However, in general, separate functoriality is not enough to prove joint functoriality. Categories in which joint functoriality fails are called \textit{premonoidal}.
|
||||
it would be enough to check them separately for each argument. However, in general,
|
||||
separate functoriality is not enough to prove joint functoriality. Categories in which
|
||||
joint functoriality fails are called \newterm{premonoidal}.
|
||||
|
||||
Let's define a bifunctor in Haskell. In this case all three categories
|
||||
are the same: the category of Haskell types. A bifunctor is a type
|
||||
@ -61,7 +63,9 @@ at once. The result is a lifted function,
|
||||
\code{(f a b -> f c d)}, operating on types
|
||||
generated by the bifunctor's type constructor. There is a default
|
||||
implementation of \code{bimap} in terms of \code{first} and
|
||||
\code{second}. (As mentioned before, this doesn't always work, because the two maps may not commute, that is \code{first g . second h} may not be the same as \code{second h . first g}.)
|
||||
\code{second}. (As mentioned before, this doesn't always work, because
|
||||
the two maps may not commute, that is \code{first g . second h} may not
|
||||
be the same as \code{second h . first g}.)
|
||||
|
||||
|
||||
\noindent
|
||||
|
Loading…
Reference in New Issue
Block a user