hasklepias-0.5.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 MonoLocalBinds #-}
{-# LANGUAGE NoImplicitPrelude #-}
module ExampleFeatures3(
exampleFeatures3Spec
) where
import Hasklepias
import ExampleEvents ( exampleEvents4 )
import Test.Hspec
examplePairComparison :: (Intervallic Interval a
, IntervalSizeable a b) =>
FeatureDefinition * (Interval a) a (Bool, Maybe a)
examplePairComparison = defineFEF Unknown
( \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
|> intervals -- get the intervals of any "c1" events
|> (\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 = featureR $ beginerval 50 0
exampleFeatures3Spec :: Spec
exampleFeatures3Spec = do
it "examplePairComparison" $
applyFEF examplePairComparison flwup exampleEvents4 `shouldBe`
featureR (True, Just 16)