module Managed.Probe.Internal.Params ( params , paramsCnt , returns ) where import Data.Typeable someFunction :: TypeRep someFunction :: TypeRep someFunction = Proxy (() -> ()) -> TypeRep forall k (proxy :: k -> *) (a :: k). Typeable a => proxy a -> TypeRep typeRep (Proxy (() -> ()) forall k (t :: k). Proxy t Proxy :: Proxy (() -> ())) isFunction :: TypeRep -> Bool isFunction :: TypeRep -> Bool isFunction TypeRep x = TyCon -> Fingerprint tyConFingerprint (TypeRep -> TyCon typeRepTyCon TypeRep x) Fingerprint -> Fingerprint -> Bool forall a. Eq a => a -> a -> Bool == TyCon -> Fingerprint tyConFingerprint (TypeRep -> TyCon typeRepTyCon TypeRep someFunction) expand :: TypeRep -> [TypeRep] expand :: TypeRep -> [TypeRep] expand TypeRep x = if TypeRep -> Bool isFunction TypeRep x then [TypeRep] -> [TypeRep] flatten (TypeRep -> [TypeRep] typeRepArgs TypeRep x) else [TypeRep x] flatten :: [TypeRep] -> [TypeRep] flatten :: [TypeRep] -> [TypeRep] flatten = (TypeRep -> [TypeRep]) -> [TypeRep] -> [TypeRep] forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b] concatMap TypeRep -> [TypeRep] expand params :: TypeRep -> [TypeRep] params :: TypeRep -> [TypeRep] params = [TypeRep] -> [TypeRep] forall a. [a] -> [a] init ([TypeRep] -> [TypeRep]) -> (TypeRep -> [TypeRep]) -> TypeRep -> [TypeRep] forall b c a. (b -> c) -> (a -> b) -> a -> c . TypeRep -> [TypeRep] expand paramsCnt :: TypeRep -> Int paramsCnt :: TypeRep -> Int paramsCnt = [TypeRep] -> Int forall (t :: * -> *) a. Foldable t => t a -> Int length ([TypeRep] -> Int) -> (TypeRep -> [TypeRep]) -> TypeRep -> Int forall b c a. (b -> c) -> (a -> b) -> a -> c . TypeRep -> [TypeRep] params returns :: TypeRep -> TypeRep returns :: TypeRep -> TypeRep returns = [TypeRep] -> TypeRep forall a. [a] -> a last ([TypeRep] -> TypeRep) -> (TypeRep -> [TypeRep]) -> TypeRep -> TypeRep forall b c a. (b -> c) -> (a -> b) -> a -> c . TypeRep -> [TypeRep] expand