How let a function be used in a guard like is_binary/1

You can’t, guards are fundamentally defined in the VM itself, which allows the VM to perform specific optimizations. defguard lets you essentially construct “new” guards by composing together other guards, but you can’t make new “from scratch” guards.