Just to play devil's advocate, you might be able to handle this by hacking types through Erlang's pattern matching syntax.
Thus, you might have a function assign_activity(("KeeferUser", user_no), ("KeeferActivity", activity_no)) and rely on the compiler to match the "type" in the first field of each tuple you pass. It's not pretty, but it is possible.