Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
18
Task/Stack/Haskell/stack-1.hs
Normal file
18
Task/Stack/Haskell/stack-1.hs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
type Stack a = [a]
|
||||
|
||||
create :: Stack a
|
||||
create = []
|
||||
|
||||
push :: a -> Stack a -> Stack a
|
||||
push = (:)
|
||||
|
||||
pop :: Stack a -> (a, Stack a)
|
||||
pop [] = error "Stack empty"
|
||||
pop (x:xs) = (x,xs)
|
||||
|
||||
empty :: Stack a -> Bool
|
||||
empty = null
|
||||
|
||||
peek :: Stack a -> a
|
||||
peek [] = error "Stack empty"
|
||||
peek (x:_) = x
|
||||
22
Task/Stack/Haskell/stack-2.hs
Normal file
22
Task/Stack/Haskell/stack-2.hs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import Control.Monad.State
|
||||
|
||||
type Stack a b = State [a] b
|
||||
|
||||
push :: a -> Stack a ()
|
||||
push = modify . (:)
|
||||
|
||||
pop :: Stack a a
|
||||
pop = do
|
||||
nonEmpty
|
||||
x <- peek
|
||||
modify tail
|
||||
return x
|
||||
|
||||
empty :: Stack a Bool
|
||||
empty = gets null
|
||||
|
||||
peek :: Stack a a
|
||||
peek = nonEmpty >> gets head
|
||||
|
||||
nonEmpty :: Stack a ()
|
||||
nonEmpty = empty >>= flip when (fail "Stack empty")
|
||||
Loading…
Add table
Add a link
Reference in a new issue