Skip to content

Commit

Permalink
Корекция по терминологията за функтори
Browse files Browse the repository at this point in the history
  • Loading branch information
triffon committed Dec 19, 2024
1 parent 2be0bbc commit a199f75
Showing 1 changed file with 13 additions and 13 deletions.
26 changes: 13 additions & 13 deletions 2.7-haskell_func.tex
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

\title{Функтори и монади}

\date{17 януари 2022 г.}
\date{18 декември 2024 г.}

\lstset{language=Haskell,style=Haskell}

Expand Down Expand Up @@ -91,7 +91,7 @@ \section{Функтори}
\textbf{Проблем №1:}
\begin{itemize}[<+->]
\item \lst{fmap id (BluePill 2) = RedPill 2}
\item \lst{fmap} с „празна“ функция променя структурата на функтора!
\item \lst{fmap} с „празна“ функция променя структурата на функторния обект!
\end{itemize}
\onslide<+->
\textbf{Проблем №2:}
Expand All @@ -112,11 +112,11 @@ \section{Функтори}
\end{enumerate}
\end{definition}
\pause
Функторните закони ни дават гаранция, че реализацията на \lst{fmap} е „неутрална“ към функтора и променя стойностите в него само и единствено на базата на подадената функция \lst{f}.\\
Функторните закони ни дават гаранция, че реализацията на \lst{fmap} е „неутрална“ към целевата структура и променя стойностите в него само и единствено на базата на подадената функция \lst{f}.\\
\pause
Всички примерни екземпляри (освен \lst{Pill}) удовлетворяват функторните закони.\\
\pause
Можем да мислим, че \lst{fmap} „повдига“ функцията \lst{f} от елементи към функтори.
Можем да мислим, че \lst{fmap} „повдига“ функцията \lst{f} от началните типове към функторните типове.
\end{frame}
\section{Апликативни функтори}
Expand All @@ -130,21 +130,21 @@ \section{Апликативни функтори}
\onslide<+->
\textbf{Проблем:} \typestop{fmap (+) (Just 3)}{Maybe (Int -> Int)}\\
\onslide<+->
Получаваме функтор над функция, която не можем директно да приложим над функтор над стойност!\\
Получаваме функторна функция, която не можем директно да приложим над функторна стойност!\\
\onslide<+->
\textbf{Идея:} Да разбием \lst{fmap} на две части:
\begin{itemize}[<+->]
\item повдигане на функтор над функция към функция над функтори
\item повдигане на функторна функция към функция над функторни стойности
\begin{itemize}
\item \lst{f (a -> b) -> f a -> f b}
\end{itemize}
\item повдигане на обикновена функция към функтор над функция
\item повдигане на обикновена функция към функторна функция
\begin{itemize}
\item \lst{(a -> b) -> f (a -> b)}
\end{itemize}
\end{itemize}
\onslide<+->
Функторите, които поддържат такова разлагане на \lst{fmap} наричаме \emph{апликативни}.
Функторите, които поддържат такова разлагане на \lst{fmap}, наричаме \emph{апликативни}.
\end{frame}
\begin{frame}[fragile]
Expand Down Expand Up @@ -174,13 +174,13 @@ \section{Апликативни функтори}
\item \lst!liftA2 :: Applicative f => !\\
\hspace{10ex}\lst{(a -> b -> c) -> f a -> f b -> f c}
\begin{itemize}
\item повдига двуаргументна функция над функтор
\item повдига двуаргументна функция към функторна двуаргументна функция
\item \lst!liftA2 f a b = f <$> a <*> b! % $ оцветяване на синтаксиса
\item \textbf{Пример:}\\\evalstop{liftA2 (+) [2,3] [10,20,30]}{[12,22,32,13,23,33]}
\end{itemize}
\item \lst{sequenceA :: Applicative f => [f a] -> f [a]}
\begin{itemize}
\item повдига списък от функтори до функтор над списък
\item повдига списък от функторни стойности до функторeн списък
\item \lst{sequenceA [] = pure []}
\item<.-> \lst{sequenceA (x:xs) = liftA2 (:) x (sequenceA xs)}
\item \lst{sequenceA = foldr (liftA2 (:)) (pure [])}
Expand Down Expand Up @@ -210,15 +210,15 @@ \section{Монади}
\frametitle{Операцията „свързване“ (bind)}
\begin{itemize}[<+->]
\item Функторите ни позволяваха да превърнем \emph{функция над елементи} във функция над функтори:
\item Функторите ни позволяваха да превърнем \emph{функция над елементи} във функция над функторни елементи:
\begin{itemize}
\item \evalsto{(+3) <$> [1,2]}{[4,5]} % $ оцветяване на синтаксиса
\end{itemize}
\item Апликативните функтори ни позволяваха да превърнем \emph{функтор над функция} към функция над функтори
\item Апликативните функтори ни позволяваха да превърнем \emph{функторна функция} към функция над функторни елементи
\begin{itemize}
\item \evalsto{(+) <$> [1,2] <*> [10,20]}{[11,12,21,22]} % $ оцветяване на синтаксиса
\end{itemize}
\item Но как можем да превърнем \emph{функция, връщаща функтор} във функция над функтори?
\item Но как можем да превърнем \emph{функция, връщаща функторна стойност} във функция над функторни елементи?
\begin{itemize}
\item \evalsto{(\\x -> [1..x]) =<< [3,4]}{[1,2,3,1,2,3,4]} % >> оцветяване на синтаксиса
\item Искаме структурата на функтора-резултат да може да зависи от стойността във функтора-параметър!
Expand Down

0 comments on commit a199f75

Please sign in to comment.