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