Your `uncurry` function returns nil function pointer and then try to call it. That is why you got SIGSEGV. Your `uncurry` function just defines local proc `foo` that is not used.
Don't your compiler print "Hint: 'foo' is declared but not used [XDeclaredButNotUsed]"?