From b13cdea15db8f0f10264b3c88b48e1b1e745fbf9 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sun, 26 Nov 2023 00:44:24 -0800 Subject: [PATCH] Add a few more convenient operations to Search.elm Signed-off-by: Danila Fedorin --- src/Bergamot/Search.elm | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Bergamot/Search.elm b/src/Bergamot/Search.elm index 512aed7..fe0007c 100644 --- a/src/Bergamot/Search.elm +++ b/src/Bergamot/Search.elm @@ -1,4 +1,4 @@ -module Bergamot.Search exposing (..) +module Bergamot.Search exposing (Search, map, apply, andThen, pure, fail, interleave, one) type SearchStep a = Empty @@ -12,6 +12,24 @@ map f s () = Empty -> Empty Found a sp -> Found (f a) (map f sp) +apply : Search (a -> b) -> Search a -> Search b +apply sf sa () = + case sf () of + Empty -> Empty + Found f sfp -> interleave (map f sa) (apply sfp sa) () + +andThen : (a -> Search b) -> Search a -> Search b +andThen f sa () = + case sa () of + Empty -> Empty + Found a sap -> interleave (f a) (andThen f sap) () + +pure : a -> Search a +pure a () = Found a (\() -> Empty) + +fail : Search a +fail () = Empty + interleave : Search a -> Search a -> Search a interleave s1 s2 () = case s1 () of