module FRP.Grapefruit.Record.Optionality (
Req,
Opt,
OptRecord (type All, type Required)
) where
import FRP.Grapefruit.Signal as Signal
import FRP.Grapefruit.Record as Record
data Req name
data Opt name
class (Record (All optRecord), Record (Required optRecord)) =>
OptRecord (optRecord :: * -> *) where
type All optRecord :: * -> *
type Required optRecord :: * -> *
instance OptRecord X where
type All X = X
type Required X = X
instance (OptRecord optRecord) => OptRecord (optRecord :& Req name ::: signal `Of` val) where
type All (optRecord :& Req name ::: signal `Of` val) = All optRecord :&
name ::: signal `Of` val
type Required (optRecord :& Req name ::: signal `Of` val) = Required optRecord :&
name ::: signal `Of` val
instance (OptRecord optRecord) => OptRecord (optRecord :& Opt name ::: signal `Of` val) where
type All (optRecord :& Opt name ::: signal `Of` val) = All optRecord :&
name ::: signal `Of` val
type Required (optRecord :& Opt name ::: signal `Of` val) = Required optRecord