> module Frame.Data ( > Data (..) > ) where > import Frame.GUI > import qualified Data.ByteString.Lazy as L > -- | A collection of views which can be streamed to the client by the server > data Data > = View GUI -- ^ A full view > | ViewPart [Container] -- ^ A partial view > | File L.ByteString -- ^ A file > | Error404 -- ^ File not found, 404 HTTP response > | Redirect URL -- ^ Redirection > instance Composable Data where > (View g) <+ c = View $ g <+ c > (ViewPart cs) <+ c = ViewPart $ cs ++ [c] > d <+ _ = d > c +> (View g) = View $ c +> g > c +> (ViewPart cs) = ViewPart $ (c:cs) > _ +> d = d