Skip to content

Commit 90d7b47

Browse files
committed
Adding a way to compose queries
1 parent 8398c3b commit 90d7b47

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/Data/Query.purs

+14-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ module Data.Query where
22

33
import Prelude
44

5-
import Control.Monad.Reader.Class (asks)
6-
import Control.Monad.Reader.Trans (ReaderT)
5+
import Control.Monad.Reader.Class (ask, asks)
6+
import Control.Monad.Reader.Trans (ReaderT, runReaderT)
7+
import Control.Monad.Trans.Class (lift)
78
import Data.DataFrame (DataFrame(..))
89
import Data.Filterable (filter) as Filterable
910
import Data.Foldable (foldr)
@@ -17,6 +18,17 @@ import Data.Tuple.Nested (type (/\))
1718

1819
type Query m a b = ReaderT (DataFrame a) m (DataFrame b)
1920

21+
-- We should make (Query m) a Semigroupoid and use `compose` instead of this way
22+
composeQuery
23+
:: m a b c
24+
. Monad m
25+
=> Query m a b
26+
-> Query m b c
27+
-> Query m a c
28+
composeQuery q1 q2 = do
29+
df <- ask
30+
lift $ runReaderT q1 df >>= runReaderT q2
31+
2032
filter :: m a. Monad m => (a -> Boolean) -> Query m a a
2133
filter f = asks (Filterable.filter f)
2234

test/Main.purs

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
module Test.Main where
22

33
import Prelude
4+
5+
import Control.Monad.Reader.Class (ask)
6+
import Control.Monad.Reader.Trans (runReaderT)
7+
import Control.Monad.Trans.Class (lift)
8+
import Data.Query (Query)
49
import Effect (Effect)
510
import Effect.Console (log)
611

0 commit comments

Comments
 (0)