Add support for multiple levels
Add a data structure, based on the zipper comonad, which provides support for multiple levels, each of which is its own entity map. The current level is provided by coreturn, which the `entities` lens has been updated to use. Nothing currently supports going up or down levels yet - that's coming next.
This commit is contained in:
		
							parent
							
								
									e669b54f0c
								
							
						
					
					
						commit
						6b0bab0e85
					
				
					 11 changed files with 397 additions and 14 deletions
				
			
		
							
								
								
									
										24
									
								
								src/Xanthous/Util/Comonad.hs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/Xanthous/Util/Comonad.hs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| -------------------------------------------------------------------------------- | ||||
| module Xanthous.Util.Comonad | ||||
|   ( -- * Store comonad utils | ||||
|     replace | ||||
|   , current | ||||
|   ) where | ||||
| -------------------------------------------------------------------------------- | ||||
| import Xanthous.Prelude | ||||
| -------------------------------------------------------------------------------- | ||||
| import Control.Comonad.Store.Class | ||||
| -------------------------------------------------------------------------------- | ||||
| 
 | ||||
| -- | Replace the current position of a store comonad with a new value by | ||||
| -- comparing positions | ||||
| replace :: (Eq i, ComonadStore i w) => w a -> a -> w a | ||||
| replace w x = w =>> \w' -> if pos w' == pos w then x else extract w' | ||||
| {-# INLINE replace #-} | ||||
| 
 | ||||
| -- | Lens into the current position of a store comonad. | ||||
| -- | ||||
| --     current = lens extract replace | ||||
| current :: (Eq i, ComonadStore i w) => Lens' (w a) a | ||||
| current = lens extract replace | ||||
| {-# INLINE current #-} | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue