You might not encounter it, as ImplicitParams isn't common, but it has a nice answer. Note that `HasCallStack` is implemented as an implicit parameter: (?callstack :: CallStack). {-# LANGUAGE TypeOperators, LambdaCase, RankNTypes #-} import GHC.Stack type a ?-> b = HasCallStack => a -> b foo :: a ?-> a foo x = x map' :: (a ?-> b) -> [a] ?-> [b] map' f = \case [] -> [] (x:xs) -> f x : map f xs ohno :: Int ?-> String ohno 5 = error "Five is my least favorite number." ohno x = show x main = print $ map' ohno [1..10] This has the result: *Main> main ["1","2","3","4","*** Exception: Five is my least favorite number. CallStack (from HasCallStack): error, called at /home/matt/impl.hs:16:10 in main:Main ohno, called at /home/matt/impl.hs:19:21 in main:Main f, called at /home/matt/impl.hs:13:23 in main:Main map', called at /home/matt/impl.hs:19:16 in main:Main Matt Parsons On Sun, Mar 18, 2018 at 5:05 PM, Thomas Jakway <tjakway@nyu.edu> wrote:
Posting this here since some of you are Scala programmers: https://stackoverflow.com/questions/49353695/type-synonyms-for-implicits
A type-level question you won't encounter in Haskell.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.