Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
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