you are viewing a single comment's thread
view the rest of the comments
[–] 11 points 1 year ago* (last edited 1 year ago) (2 children)

This is probably an ok use for a GADT. Something like:

{-# LANGUAGE DataKinds      #-}
{-# LANGUAGE GADTs          #-}
{-# LANGUAGE KindSignatures #-}

data Bap = Baptized | Unbaptized

data Person :: Bap -> * where
   Baptize :: Person Unbaptized -> Person Baptized
   NewPerson :: Person Unbaptized

conditionalBaptize :: Person a -> Person Baptized
conditionalBaptize p =
    case p of NewPerson -> Baptize p
              Baptize _ -> p

main = return ()
  • source
  • parent
  • hideshow 2 child comments