Everywhere else in lens we adopted the practice of adding pattern synonyms for the prisms we supply. Here this would look something like:
pattern JSON :: (FromJSON a, ToJSON a, AsJSON t) => () => a -> t
pattern JSON a <- (preview _JSON -> Just a) where
JSON a = _JSON # a
pattern Value_ :: (FromJSON a, ToJSON a) => () => a -> Value
pattern Value_ a <- (fromJSON -> Success a) where
Value_ a = toJSON a
pattern Number_ :: AsNumber t => Scientific -> t
pattern Number_ n <- (preview _Number -> Just n) where
Number_ n = _Number # n
pattern Double :: AsNumber t => Double -> t
pattern Double d <- (preview _Double -> Just d) where
Double d = _Double # d
pattern Integer :: AsNumber t => Integer -> t
pattern Integer i <- (preview _Integer -> Just i) where
Integer i = _Integer # i
pattern Integral :: (AsNumber t, Integral a) => a -> t
pattern Integral d <- (preview _Integral -> Just d) where
Integral d = _Integral # d
pattern Primitive :: AsPrimitive t => Primitive -> t
pattern Primitive p <- (preview _Primitive -> Just p) where
Primitive p = _Primitive # p
pattern Bool_ :: AsPrimitive t => Bool -> t
pattern Bool_ b <- (preview _Bool -> Just b) where
Bool_ b = _Bool # b
pattern String_ :: AsPrimitive t => Text -> t
pattern String_ p <- (preview _String -> Just p) where
String_ p = _String # p
pattern Null_ :: AsPrimitive t => t
pattern Null_ <- (preview _Null -> Just ()) where
Null_ = _Null # ()
Everywhere else in
lens
we adopted the practice of adding pattern synonyms for the prisms we supply. Here this would look something like: