trying functors/bifunctors