From a7309c7473f6050446875a559767eff1d7906b42 Mon Sep 17 00:00:00 2001 From: nihonium Date: Tue, 7 Mar 2023 19:35:21 +0300 Subject: [PATCH] zipList --- applicative/CustomList.hs | 13 +++++++++++++ applicative/list.md | 10 +++------- 2 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 applicative/CustomList.hs diff --git a/applicative/CustomList.hs b/applicative/CustomList.hs new file mode 100644 index 0000000..a47f248 --- /dev/null +++ b/applicative/CustomList.hs @@ -0,0 +1,13 @@ +newtype CustomList a = CustomList [a] deriving Show + +instance Functor CustomList where + fmap f (CustomList lst) = CustomList $ fmap f lst + +instance Applicative CustomList where + pure x = CustomList $ repeat x + {- + -- default implementation + pure x = CustomList [x] + (CustomList fs) <*> (CustomList xs) = CustomList $ [f x | f <- fs, x <- xs] + -} + (CustomList fs) <*> (CustomList xs) = CustomList $ zipWith ($) fs xs diff --git a/applicative/list.md b/applicative/list.md index 3bae384..e30b9c6 100644 --- a/applicative/list.md +++ b/applicative/list.md @@ -16,7 +16,7 @@ u <*> (v <*> w) == pure (.) <*> u <*> v <*> w ## Доказательство -### Identity +### 1.Identity ``` pure id <*> CustomList lst == @@ -45,10 +45,6 @@ pure ($ y) <*> u == CustomList $ repeat ($ y) <*> CustomList fs == CustomList $ zipWith ($) (repeat ($ y)) fs [2] -Type of ($ y): (a -> b) -> b -Type of ($): (a -> b) -> a -> b -Type of ($) ($ y): (a -> b) -> b - ($) f x == ($) ($ x) f => [1] == [2] @@ -62,10 +58,10 @@ CustomList fs2 <*> (CustomList fs1 <*> CustomList xs) == CustomList fs2 <*> CustomList $ zipWith ($) fs1 xs == CustomList fs2 <*> CustomList xs1 == ... == -CustomList xs12 (Длина xs12 - наименьшая из длин fs1, fs2 и xs) +CustomList xs12 (Длина xs12 - наименьшая из длин fs1, fs2 и xs, сначала применены ф-ии из fs1, потом - из fs2) pure (.) <*> u <*> v <*> w == pure (.) CustomList fs2 <*> CustomList fs1 <*> CustomList xs == CustomList fs12 <*> Custom xs == (fs12 - список из композиций соответствующих функций, длина fs12 - наименьшая из длин fs1 и fs2) -CustomList xs12 (длина xs12 - наименьшая из длин fs12 и xs) +CustomList xs12 (длина xs12 - наименьшая из длин fs12 и xs, сначала применены ф-ии из fs1, потом - из fs2)) ```