Replies (10)
-
@kb, более сложный случай описывать лень, но общий рецепт такой:
bar :: a
bar = undefined
foo = bar (proxy..)
where
bar' :: Proxy a -> a
bar' _ = bar
данный подход шире, чем ScopedTypeVariables. Енмип ScopedTypeVariables стандартом быть не могут, т.к. способны поломать существующий код [источник не указан 0 дней]./1 · Reply -
@qnikst, Не знаю, у меня вот вчера наоборот без STVs не получилось обойтись: lpaste.net
Там во втором случае 'asTypeOf (M1 r) _sel' должен был дать '_sel' тип 'M1 i c f p' причем из сигнатуры и с ограничениями(?). Но (Selector c) почему-то не вывелся. -
@qnikst, Хелперами a la asTypeOf обычно можно обойтись, но ScopedTypeVariables обычно изящнее.
Подозреваю что даже можно всегда, но получится стоя и в гамаке -
@PineappleZombie, с меня в ближайшие дни пример, где ScopedTypeVariables не справится, насколько я понимаю на type families тип может не вывестись (во всяком случае у меня были такие случаи, но они слишком сложные, чтобы выкложить минимальный пример). А в целом — да в большинстве случаев ScopedTypeVariables это то, что надо.