You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

1.6 KiB

Законы

--Identity
pure id <*> x == x

--2.Homomorphism
pure f <*> pure x == pure (f x)

--3.Interchange
u <*> pure y == pure ($ y) <*> u

--4.Composition
u <*> (v <*> w) == pure (.) <*> u <*> v <*> w

Доказательство

1.Identity

pure id <*> CustomList lst == 
CustomList $ repeat id <*> CustomList lst ==
CustomList $ zipWith ($) (repeat id) lst ==
CustomList lst 

2.Homomorphism

pure f <*> pure x ==
CustomList $ repeat f <*> CustomList $ repeat x ==
CustomList $ zipWith ($) (repeat f) (repeat x) ==
CustomList $ repeat (f x)

3.Interchange

u <*> pure y ==
CustomList fs <*> CustomList $ repeat y ==
CustomList $ zipWith ($) fs (repeat y) [1]

pure ($ y) <*> u ==
CustomList $ repeat ($ y) <*> CustomList fs ==
CustomList $ zipWith ($) (repeat ($ y)) fs [2]

($) f x == ($) ($ x) f

=> [1] == [2]

4.Composition

u <*> (v <*> w) == 
CustomList fs2 <*> (CustomList fs1 <*> CustomList xs) ==
CustomList fs2 <*> CustomList $ zipWith ($) fs1 xs ==
CustomList fs2 <*> CustomList xs1 ==
... ==
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, сначала применены ф-ии из fs1, потом - из fs2))