#if __GLASGOW_HASKELL__ >= 701
#endif
module Compiler.Hoopl.Shape
where
data O
data C
data HalfShape s where
ShapeO :: HalfShape O
ShapeC :: HalfShape C
data Shape e x where
ShapeOO :: Shape O O
ShapeCO :: Shape C O
ShapeOC :: Shape O C
ShapeCC :: Shape C C
class Shapely n where
shape :: n e x -> Shape e x
shapeAtEntry :: n e x -> HalfShape e
shapeAtExit :: n e x -> HalfShape x
shapeAtEntry = entryHalfShape . shape
shapeAtExit = exitHalfShape . shape
entryHalfShape :: Shape e x -> HalfShape e
exitHalfShape :: Shape e x -> HalfShape x
entryHalfShape ShapeOO = ShapeO
entryHalfShape ShapeOC = ShapeO
entryHalfShape ShapeCO = ShapeC
entryHalfShape ShapeCC = ShapeC
exitHalfShape ShapeOO = ShapeO
exitHalfShape ShapeOC = ShapeC
exitHalfShape ShapeCO = ShapeO
exitHalfShape ShapeCC = ShapeC