有没有办法在仍然编写类型签名的同时指定隐式参数的递归行为?

sch*_*ine 5 haskell types ghc

根据 GHC 用户指南,如果函数具有类型签名,则显式绑定的隐式参数仅传播到递归调用中,否则,将使用来自原始调用的隐式参数。

fu True = ?gn
fu False = let ?gn = not ?gn in fu True
br :: (?sp :: Bool) => Bool -> Bool
br True = ?sp
br False = let ?sp = not ?sp in br True
Run Code Online (Sandbox Code Playgroud)
ghci> let ?gn = True in fu False
True
ghci> let ?sp = True in br False
False
Run Code Online (Sandbox Code Playgroud)

但是,如果我想fu在保留其行为的同时提供类型签名怎么办?我可以这样做吗?