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
 | 
						|
 |