module Language.Java.Class.Version(
Version(..)
, VersionError(..)
, AsVersionMinorUnexpectedEof(..)
, versionMinorUnexpectedEof
, AsVersionMajorUnexpectedEof(..)
, versionMajorUnexpectedEof
, version
) where
import Control.Applicative(Applicative)
import Control.Lens(Choice, Optic', prism', ( # ))
import Control.Monad(return)
import Data.Eq(Eq)
import Data.Functor.Identity(Identity)
import Data.Maybe(Maybe(Just, Nothing))
import Data.Ord(Ord)
import Data.Tagged(Tagged)
import Data.Tickle(Get, word16be, (!-))
import Data.Word(Word16)
import Prelude(Show)
data Version =
Version
Word16
Word16
deriving (Eq, Ord, Show)
data VersionError =
VersionMinorUnexpectedEof
| VersionMajorUnexpectedEof
deriving (Eq, Ord, Show)
class AsVersionMinorUnexpectedEof p f s where
_VersionMinorUnexpectedEof ::
Optic' p f s ()
instance (Choice p, Applicative f) => AsVersionMinorUnexpectedEof p f VersionError where
_VersionMinorUnexpectedEof =
prism'
(\() -> VersionMinorUnexpectedEof)
(\e -> case e of
VersionMinorUnexpectedEof -> Just ()
VersionMajorUnexpectedEof -> Nothing)
versionMinorUnexpectedEof ::
AsVersionMinorUnexpectedEof Tagged Identity t =>
t
versionMinorUnexpectedEof =
_VersionMinorUnexpectedEof # ()
class AsVersionMajorUnexpectedEof p f s where
_VersionMajorUnexpectedEof ::
Optic' p f s ()
instance (Choice p, Applicative f) => AsVersionMajorUnexpectedEof p f VersionError where
_VersionMajorUnexpectedEof =
prism'
(\() -> VersionMajorUnexpectedEof)
(\e -> case e of
VersionMinorUnexpectedEof -> Nothing
VersionMajorUnexpectedEof -> Just ())
versionMajorUnexpectedEof ::
AsVersionMajorUnexpectedEof Tagged Identity t =>
t
versionMajorUnexpectedEof =
_VersionMajorUnexpectedEof # ()
version ::
(AsVersionMinorUnexpectedEof Tagged Identity e, AsVersionMajorUnexpectedEof Tagged Identity e) =>
Get e Version
version =
do mn <- versionMinorUnexpectedEof !- word16be
mj <- versionMajorUnexpectedEof !- word16be
return (Version mn mj)