{-# LANGUAGE GeneralizedNewtypeDeriving #-} module Data.Geo.Route.Distance( Distance , HasDistance(..) , HasMaybeDistance(..) , distanceIso ) where import Prelude(Show, Num, Real, Enum, Integral) import Data.Eq(Eq) import Data.Function(id) import Data.Int(Int) import Data.Maybe(Maybe) import Data.Ord(Ord) import Control.Lens(Lens', Iso', iso) newtype Distance = Distance Int deriving (Eq, Ord, Show, Num, Real, Enum, Integral) distanceIso :: Iso' Int Distance distanceIso = iso Distance (\(Distance s) -> s) class HasDistance t where distance :: Lens' t Distance class HasMaybeDistance t where maybeDistance :: Lens' t (Maybe Distance) instance HasDistance Distance where distance = id