well, the typeclasses are &#x27;determined&#x27; at compile-time, but they are certainly de-sugared into extra function paramaters that are still passed around (injected) at run-time.  Haskell does not completely specialize this away (even though in theory it could).  But i grant you manual threading allows the user to do different things than expected.