maleghast-engine/src/Util.hs

36 lines
732 B
Haskell

module Util
( toMaybe
, dup
, secondClassLensNames
, (??)
, Never
, never
, note
) where
import Data.Bool (bool)
import Lens.Micro.TH (LensRules, lensRules, lensField, DefName (TopName))
import Language.Haskell.TH (mkName, nameBase)
import Lens.Micro
toMaybe :: Bool -> a -> Maybe a
toMaybe p = if p then Just else const Nothing
dup :: a -> (a, a)
dup a = (a, a)
infixl 4 ??
(??) :: Functor f => f (a -> b) -> a -> f b
f ?? a = ($ a) <$> f
secondClassLensNames :: LensRules
secondClassLensNames = lensRules & lensField .~ (\_ _ n -> [TopName $ mkName $ nameBase n ++ "L"])
data Never
never :: Never -> a
never n = case n of
note :: a -> Maybe b -> Either a b
note _ (Just b) = Right b
note n Nothing = Left n