this for example smells like it might use a type parameter to match the input with the output