packages feed

singletons-1.0: tests/compile-and-dump/Singletons/BoxUnBox.ghc76.template

Singletons/BoxUnBox.hs:0:0: Splicing declarations
    singletons
      [d| unBox :: Box a -> a
          unBox (FBox a) = a
          
          data Box a = FBox a |]
  ======>
    Singletons/BoxUnBox.hs:(0,0)-(0,0)
    data Box a = FBox a
    unBox :: forall a. Box a -> a
    unBox (FBox a) = a
    type BoxTyCtor = Box
    data BoxTyCtorSym0 (k :: TyFun * *)
    type instance Apply BoxTyCtorSym0 a = BoxTyCtor a
    data FBoxSym0 (k :: TyFun a (Box a))
    type instance Apply FBoxSym0 a = FBox a
    type family UnBox (a :: Box a) :: a
    type instance UnBox (FBox a) = a
    data UnBoxSym0 (k :: TyFun (Box a) a)
    type instance Apply UnBoxSym0 a = UnBox a
    data instance Sing (z :: Box a)
      = forall (n :: a). z ~ FBox n => SFBox (Sing n)
    type SBox (z :: Box a) = Sing z
    instance SingKind (KProxy :: KProxy a) =>
             SingKind (KProxy :: KProxy (Box a)) where
      type instance DemoteRep (KProxy :: KProxy (Box a)) =
          Box (DemoteRep (KProxy :: KProxy a))
      fromSing (SFBox b) = FBox (fromSing b)
      toSing (FBox b)
        = case toSing b :: SomeSing (KProxy :: KProxy a) of {
            SomeSing c -> SomeSing (SFBox c) }
    instance SingI n => SingI (FBox (n :: a)) where
      sing = SFBox sing
    sUnBox :: forall (t :: Box a). Sing t -> Sing (UnBox t)
    sUnBox (SFBox a) = a