[Haskell-cafe] error terminated list
Evan Laforge
qdunkan at gmail.com
Mon Dec 18 21:10:32 UTC 2017
I've been using this lately to represent a process which can fail but
still produce data:
data UntilFail err a = a :+ UntilFail err a | Done | Fail err
I know there's been discussion of this type before, but I don't
remember what it was called and I can't find the right search terms to
turn it up. Ring any bells? I have some awkward names for it, but
maybe someone else thought of something more elegant.
I have some ad-hoc functions for it:
mapUntilFail :: (a -> Either err b) -> UntilFail err a -> UntilFail err b
concatMapUntilFail :: (a -> UntilFail err b) -> UntilFail err a ->
UntilFail err b
-- | Like 'concatMapUntilFail', but consume a variable number of results.
--
-- A more precise type would end with @Done [a]@.
processUntilFail :: (a -> [a] -> (UntilFail err b, [a])) -> [a] ->
UntilFail err b
Maybe someone who has thought more deeply about it has come up with
more elegant abstractions.
More information about the Haskell-Cafe
mailing list