@@ -10,12 +10,12 @@
1010{-# language UndecidableInstances #-}
1111{-# language UndecidableSuperClasses #-}
1212
13−module Rel8.Schema.Nullability
13+module Rel8.Schema.Null
1414 ( Nullify, Unnullify
1515 , NotNull
1616 , Homonullable
17− , Nullability( Nullable, NonNullable )
18− , HasNullability, nullabilization
17+ , Nullity( Null, NotNull )
18+ , Nullable, nullable
1919 , Sql, fromSql, mapSql, toSql
2020 )
2121where
@@ -56,8 +56,8 @@ type Nullify a = Maybe (Unnullify a)
5656
5757-- | @nullify a@ means @a@ cannot take @null@ as a value.
5858type NotNull :: Type -> Constraint
59−class (HasNullability a, IsMaybe a ~ 'False) => NotNull a
60−instance (HasNullability a, IsMaybe a ~ 'False) => NotNull a
59+class (Nullable a, IsMaybe a ~ 'False) => NotNull a
60+instance (Nullable a, IsMaybe a ~ 'False) => NotNull a
6161
6262
6363-- | @Homonullable a b@ means that both @a@ and @b@ can be @null@, or neither
@@ -67,39 +67,39 @@ class IsMaybe a ~ IsMaybe b => Homonullable a b
6767instance IsMaybe a ~ IsMaybe b => Homonullable a b
6868
6969
70−type Nullability :: Type -> Type
71−data Nullability a where
72− NonNullable :: NotNull a => Nullability a
73− Nullable :: NotNull a => Nullability (Maybe a)
70+type Nullity :: Type -> Type
71+data Nullity a where
72+ NotNull :: NotNull a => Nullity a
73+ Null :: NotNull a => Nullity (Maybe a)
7474
7575
76−type HasNullability' :: Bool -> Type -> Constraint
76+type Nullable' :: Bool -> Type -> Constraint
7777class
7878 ( IsMaybe a ~ isMaybe
7979 , IsMaybe (Unnullify a) ~ 'False
8080 , Nullify' isMaybe (Unnullify a) ~ a
81− ) => HasNullability' isMaybe a
81+ ) => Nullable' isMaybe a
8282 where
83− nullabilization' :: Nullability a
83+ nullable' :: Nullity a
8484
8585
86−instance IsMaybe a ~ 'False => HasNullability' 'False a where
87− nullabilization' = NonNullable
86+instance IsMaybe a ~ 'False => Nullable' 'False a where
87+ nullable' = NotNull
8888
8989
90−instance IsMaybe a ~ 'False => HasNullability' 'True (Maybe a) where
91− nullabilization' = Nullable
90+instance IsMaybe a ~ 'False => Nullable' 'True (Maybe a) where
91+ nullable' = Null
9292
9393
94−-- | @HasNullability a@ means that @rel8@ is able to check if the type @a@ is a
94+-- | @Nullable a@ means that @rel8@ is able to check if the type @a@ is a
9595-- type that can take @null@ values or not.
96−type HasNullability :: Type -> Constraint
97−class HasNullability' (IsMaybe a) a => HasNullability a
98−instance HasNullability' (IsMaybe a) a => HasNullability a
96+type Nullable :: Type -> Constraint
97+class Nullable' (IsMaybe a) a => Nullable a
98+instance Nullable' (IsMaybe a) a => Nullable a
9999
100100
101−nullabilization :: HasNullability a => Nullability a
102−nullabilization = nullabilization'
101+nullable :: Nullable a => Nullity a
102+nullable = nullable'
103103
104104
105105-- | The @Sql@ type class describes both null and not null database values,
@@ -109,12 +109,12 @@ nullabilization = nullabilization'
109109-- supports equality, and @a@ can either be exactly an @a@, or it could also be
110110-- @Maybe a@.
111111type Sql :: (Type -> Constraint) -> Type -> Constraint
112−class (constraint (Unnullify a), HasNullability a) => Sql constraint a
113−instance (constraint (Unnullify a), HasNullability a) => Sql constraint a
112+class (constraint (Unnullify a), Nullable a) => Sql constraint a
113+instance (constraint (Unnullify a), Nullable a) => Sql constraint a
114114
115115
116−fromSql :: Dict (Sql constraint) a -> (Nullability a, Dict constraint (Unnullify a))
117−fromSql Dict = (nullabilization, Dict)
116+fromSql :: Dict (Sql constraint) a -> (Nullity a, Dict constraint (Unnullify a))
117+fromSql Dict = (nullable, Dict)
118118{-# INLINABLE fromSql #-}
119119
120120
@@ -122,10 +122,10 @@ mapSql :: ()
122122 => (forall x. Dict constraint x -> Dict constraint' x)
123123 -> Dict (Sql constraint) a -> Dict (Sql constraint') a
124124mapSql f dict = case fromSql dict of
125− (nullability, dict') -> toSql nullability (f dict')
125+ (nullity, dict') -> toSql nullity (f dict')
126126
127127
128−toSql :: Nullability a -> Dict constraint (Unnullify a) -> Dict (Sql constraint) a
129−toSql NonNullable Dict = Dict
130−toSql Nullable Dict = Dict
128+toSql :: Nullity a -> Dict constraint (Unnullify a) -> Dict (Sql constraint) a
129+toSql NotNull Dict = Dict
130+toSql Null Dict = Dict
131131{-# INLINABLE toSql #-}