我想要将cpsRec
定义如下,但我无法做到:
如果您有实现的想法,请告诉我。
import Control.Monad.Trans.Cont (Cont)
type family ContRec r x where
ContRec r (a -> b) = a -> ContRec r b
ContRec r a = Cont r a
cpsRec :: (a -> b) -> (a -> ContRec r b)
cpsRec f a =
let fa = f a
in case fa of
(x -> y) -> cpsRec fa -- error!
_ -> pure fa -- error!
-- use case
addT :: Int -> Int -> Int -> Int
addT x y z = x + y + z
addCpsT :: Int -> Int -> Int -> Cont r Int
addCpsT = cpsRec addT
-- error!
毫无描述性,这意味着任何潜在的问题回答者都必须决定是否值得花时间查看您所看到的错误消息。 - amalloy