:: (c -> d) -> (a -> b -> c) -> a -> b -> d package:speculate -is:exact