Without the `d` argument, there's no way to infer `d` and hence to select the right instance, because `MainOpts` is a (potentially non-injective) type family: given something of type `IO (MainOpts d, a)` GHC has no way to infer `d`.