mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			34 lines
		
	
	
		
			580 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			580 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| implementation module stack
 | |
| import StdEnv
 | |
| 
 | |
| :: Stack a :== [a]
 | |
| 
 | |
| newStack :: (Stack a)
 | |
| newStack = []
 | |
| 
 | |
| push :: a (Stack a) -> Stack a
 | |
| push x s = [x:s]
 | |
| 
 | |
| pushes :: [a] (Stack a) -> Stack a
 | |
| pushes x s = x ++ s
 | |
| 
 | |
| pop :: (Stack a) -> Stack a
 | |
| pop [] = abort "Cannot use pop on an empty stack"
 | |
| pop [e:s] = s
 | |
| 
 | |
| popn :: Int (Stack a) -> Stack a
 | |
| popn n s  = drop n s
 | |
| 
 | |
| top :: (Stack a) -> a
 | |
| top [] = abort "Cannot use top on an empty stack"
 | |
| top [e:s] = e
 | |
| 
 | |
| topn :: Int (Stack a) -> [a]
 | |
| topn n s = take n s
 | |
| elements :: (Stack a) -> [a]
 | |
| elements s = s
 | |
| 
 | |
| count :: (Stack a) -> Int
 | |
| count s = length s
 | |
| 
 |