packages feed

hasklepias-0.17.0: examples/ExampleFeatures3.hs

{-|
Module      : ExampleFeatures3
Description : Demostrates how to define features using Hasklepias
Copyright   : (c) NoviSci, Inc 2020
License     : BSD3
Maintainer  : bsaul@novisci.com
-}

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoImplicitPrelude #-}

module ExampleFeatures3
  ( exampleFeatures3Spec
  ) where

import           ExampleEvents                  ( exampleEvents4 )
import           Hasklepias
import           Test.Hspec


examplePairComparison
  :: (IntervalSizeable a b) => Interval a -> Events a -> (Bool, Maybe a)
examplePairComparison i es =
  es
    |> filterConcur i                   -- filter to concurring with followup interval    
    |> splitByConcepts ["c1"] ["c2"]    -- form a list of pairs where first element
    |> uncurry allPairs                 -- has "c1" events and second has "c2" events    

    |> filter                           -- filter this list of pairs to cases 
              (\pr -> fst pr `concur`             -- where "c1" event concurs with +/- 3
                                      expand 3 3 (snd pr))           -- of any "c2" event 
    |> fmap fst
    |> (\x ->
         ( isNotEmpty x                  -- are there any?
         , fmap begin (lastMay x)
         )
       )      -- if exists, keep the begin of the last "c1" interval

flwup :: FeatureData (Interval Int)
flwup = pure $ beginerval 50 0

exampleFeatures3Spec :: Spec
exampleFeatures3Spec = do

  it "examplePairComparison"
    $          liftA2 examplePairComparison flwup (pure exampleEvents4)
    `shouldBe` pure (True, Just 16)