是否可以为此类型编写函子实例?

Cam*_*all 1 haskell functor

鉴于:

data MyType a = Done a | Out a (MyType a) | In (a -> MyType a)
Run Code Online (Sandbox Code Playgroud)

我正在努力实施fmap f (In x)。我最初的想法是,In $ \y -> fmap f (x y)但是由于x在a上运行而无法正常工作MyType a-好像我需要某种方式来对参数以及“内部”内容进行fmap映射(如果有道理的话)。我想我正在寻找的是一种b -> m ba -> m a给定的创建方式a -> b-可能吗?

Dan*_*ner 5

我怀疑您实际想要的类型是这种类型(或者您选择了特定类型的某种专业化i):

data MyType i o = Done o | Out o (MyType i o) | In (i -> MyType i o)
Run Code Online (Sandbox Code Playgroud)

此处的主要区别在于,In构造函数为其函数所包含的参数和结果使用单独的类型。Functor像这样将输入和输出参数分开后,您应该发现实例更容易编写。