zipList
This commit is contained in:
		
							parent
							
								
									f348445975
								
							
						
					
					
						commit
						a7309c7473
					
				
					 2 changed files with 16 additions and 7 deletions
				
			
		
							
								
								
									
										13
									
								
								applicative/CustomList.hs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								applicative/CustomList.hs
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 | ||||||
|  | @ -16,7 +16,7 @@ u <*> (v <*> w) == pure (.) <*> u <*> v <*> w | ||||||
| 
 | 
 | ||||||
| ## Доказательство | ## Доказательство | ||||||
| 
 | 
 | ||||||
| ### Identity | ### 1.Identity | ||||||
| 
 | 
 | ||||||
| ``` | ``` | ||||||
| pure id <*> CustomList lst ==  | pure id <*> CustomList lst ==  | ||||||
|  | @ -45,10 +45,6 @@ pure ($ y) <*> u == | ||||||
| CustomList $ repeat ($ y) <*> CustomList fs == | CustomList $ repeat ($ y) <*> CustomList fs == | ||||||
| CustomList $ zipWith ($) (repeat ($ y)) fs [2] | 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 | ($) f x == ($) ($ x) f | ||||||
| 
 | 
 | ||||||
| => [1] == [2] | => [1] == [2] | ||||||
|  | @ -62,10 +58,10 @@ CustomList fs2 <*> (CustomList fs1 <*> CustomList xs) == | ||||||
| CustomList fs2 <*> CustomList $ zipWith ($) fs1 xs == | CustomList fs2 <*> CustomList $ zipWith ($) fs1 xs == | ||||||
| CustomList fs2 <*> CustomList xs1 == | CustomList fs2 <*> CustomList xs1 == | ||||||
| ... == | ... == | ||||||
| CustomList xs12 (Длина xs12 - наименьшая из длин fs1, fs2 и xs) | CustomList xs12 (Длина xs12 - наименьшая из длин fs1, fs2 и xs, сначала применены ф-ии из fs1, потом - из fs2) | ||||||
| 
 | 
 | ||||||
| pure (.) <*> u <*> v <*> w == | pure (.) <*> u <*> v <*> w == | ||||||
| pure (.) CustomList fs2 <*> CustomList fs1 <*> CustomList xs == | pure (.) CustomList fs2 <*> CustomList fs1 <*> CustomList xs == | ||||||
| CustomList fs12 <*> Custom xs == (fs12 - список из композиций соответствующих функций, длина fs12 - наименьшая из длин fs1 и fs2) | CustomList fs12 <*> Custom xs == (fs12 - список из композиций соответствующих функций, длина fs12 - наименьшая из длин fs1 и fs2) | ||||||
| CustomList xs12 (длина xs12 - наименьшая из длин fs12 и xs) | CustomList xs12 (длина xs12 - наименьшая из длин fs12 и xs, сначала применены ф-ии из fs1, потом - из fs2)) | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
		Reference in a new issue