35 lines
708 B
Haskell
35 lines
708 B
Haskell
module Util
|
|
( toMaybe
|
|
, dup
|
|
, secondClassLensNames
|
|
, (??)
|
|
, Never
|
|
, never
|
|
, note
|
|
) where
|
|
|
|
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 |