p
func = let
a = 10
b = 20 in
a + b
Size: a a a
p
AZ
whileM' : (Monad m, Monad f, Alternative f) => (a -> Bool) -> m a -> m (f a)
whileM' p f = go
where go = do
x <- f
if p x
then do
xs <- go
pure (pure x <|> xs)
else pure empty
Type checking .\.\test.idr
.\.\test.idr:15:9:
|
15 | x <- f
| ^
end of block
AZ
AZ
p
p
AZ
AZ
AZ
A
EG
e
EG
EG
e
A
G
whileM' : (Monad m, Monad f, Alternative f) => (a -> Bool) -> m a -> m (f a)
whileM' p f = go
where go = do
x <- f
if p x
then do
xs <- go
pure (pure x <|> xs)
else pure empty
whileM : Monad m => (a -> Bool) -> m a -> m (List a)
whileM = whileM'
EG
e