{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
module Rerefined.Predicate.Via where
import Rerefined.Predicate.Common
import GHC.Exts ( Proxy# )
validateVia
:: forall pVia p a
. (Refine pVia a, Predicate p, KnownPredicateName p)
=> Proxy# p -> a -> Maybe RefineFailure
validateVia :: forall {k} {k} (pVia :: k) (p :: k) a.
(Refine pVia a, Predicate p, KnownPredicateName p) =>
Proxy# p -> a -> Maybe RefineFailure
validateVia Proxy# p
p a
a =
case Proxy# pVia -> a -> Maybe RefineFailure
forall {k} (p :: k) a.
Refine p a =>
Proxy# p -> a -> Maybe RefineFailure
validate (forall (a :: k). Proxy# a
forall {k} (a :: k). Proxy# a
proxy# @pVia) a
a of
Maybe RefineFailure
Nothing -> Maybe RefineFailure
forall a. Maybe a
Nothing
Just RefineFailure
e -> Proxy# p -> Builder -> [RefineFailure] -> Maybe RefineFailure
forall {k} (p :: k).
(Predicate p, KnownPredicateName p) =>
Proxy# p -> Builder -> [RefineFailure] -> Maybe RefineFailure
validateFail Proxy# p
p Builder
"via" [RefineFailure
e]