@@ -1,20 +1,26 @@
1{-# language DataKinds #-}
1{-# language DataKinds #-}
2{-# language GADTs #-}
2{-# language GADTs #-}
3+{-# language NamedFieldPuns #-}
3{-# language StandaloneKindSignatures #-}
4{-# language StandaloneKindSignatures #-}
4{-# language TypeFamilies #-}
5{-# language TypeFamilies #-}
6module Rel8.Schema.Result
7module Rel8.Schema.Result
7 ( Col( Result ), Result
8 ( Col( Result ), Result
10+ , null, nullifier, unnullifier
11+ , vectorizer, unvectorizer
12−import Prelude ()
16+import Prelude hiding ( null )
15import Rel8.Schema.Context ( Interpretation( Col ) )
19import Rel8.Schema.Context ( Interpretation( Col ) )
20+import Rel8.Schema.HTable.Identity ( HIdentity(..) )
16import Rel8.Schema.Kind ( Context )
21import Rel8.Schema.Kind ( Context )
17−import Rel8.Schema.Spec ( Spec( Spec ) )
22+import Rel8.Schema.Null ( Nullify, Nullity( Null, NotNull ) )
23+import Rel8.Schema.Spec ( Spec( Spec ), SSpec(..) )
20type Result :: Context
26type Result :: Context
@@ -24,3 +30,46 @@ data Result a
24instance Interpretation Result where
30instance Interpretation Result where
25 data Col Result _spec where
31 data Col Result _spec where
26 Result :: a -> Col Result ('Spec labels necessity a)
32 Result :: a -> Col Result ('Spec labels necessity a)
36+ => HIdentity ('Spec labels necessity a) (Col Result)
37+ -> HIdentity ('Spec relabels necessity a) (Col Result)
38+relabel (HIdentity (Result a)) = HIdentity (Result a)
41+null :: Col Result ('Spec labels necessity (Maybe a))
46+ => SSpec ('Spec labels necessity a)
47+ -> Col Result ('Spec labels necessity a)
48+ -> Col Result ('Spec labels necessity (Nullify a))
49+nullifier SSpec {nullity} (Result a) = Result $ case nullity of
55+ => SSpec ('Spec labels necessity a)
56+ -> Col Result ('Spec labels necessity (Nullify a))
57+ -> Maybe (Col Result ('Spec labels necessity a))
58+unnullifier SSpec {nullity} (Result a) =
60+ Null -> pure $ Result a
61+ NotNull -> Result <$> a
64+vectorizer :: Functor f
65+ => SSpec ('Spec labels necessity a)
66+ -> f (Col Result ('Spec labels necessity a))
67+ -> Col Result ('Spec labels necessity (f a))
68+vectorizer _ = Result . fmap (\(Result a) -> a)
71+unvectorizer :: Functor f
72+ => SSpec ('Spec labels necessity a)
73+ -> Col Result ('Spec labels necessity (f a))
74+ -> f (Col Result ('Spec labels necessity a))
75+unvectorizer _ (Result results) = Result <$> results