content: {-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
  
  module IHaskell.Display.Juicypixels (module IHaskell.Display, module Codec.Picture) where
  
  import qualified Codec.Picture as P
  import           Codec.Picture (Image(..))
  import           Codec.Picture.Png (PngSavable, encodePng)
  import           IHaskell.Display (IHaskellDisplay, Display(..), display, png, base64)
  import           Data.ByteString.Lazy (ByteString, toStrict)
  
  instance IHaskellDisplay (Image P.Pixel8) where
    display = return . format
  
  instance IHaskellDisplay (Image P.Pixel16) where
    display = return . format
  
  instance IHaskellDisplay (Image P.PixelYA8) where
    display = return . format
  
  instance IHaskellDisplay (Image P.PixelYA16) where
    display = return . format
  
  instance IHaskellDisplay (Image P.PixelRGB8) where
    display = return . format
  
  instance IHaskellDisplay (Image P.PixelRGB16) where
    display = return . format
  
  instance IHaskellDisplay (Image P.PixelRGBA8) where
    display = return . format
  
  instance IHaskellDisplay (Image P.PixelRGBA16) where
    display = return . format
  
  format :: PngSavable a => Image a -> Display
  format im@(Image w h _) = Display [png w h . base64 . toStrict . encodePng $ im]
  