Haskell 循环类型同义词声明
我想用以下代码试用HaskellHaskell 循环类型同义词声明,haskell,types,Haskell,Types,我想用以下代码试用Haskell类型和数据 type Program a = Maybe a -> (Operation a, Maybe Program a) data Operation a = Read a | Write a 程序遵循连续传递样式(CPS),而无表示终止a可以用Int或其他东西实例化 然而,GHC抱怨说: main.hs:1:1: Cycle in type synonym declarations: main.hs:1:1-58: type
类型
和数据
type Program a = Maybe a -> (Operation a, Maybe Program a)
data Operation a = Read a | Write a
程序
遵循连续传递样式(CPS),而无
表示终止a
可以用Int
或其他东西实例化
然而,GHC抱怨说:
main.hs:1:1:
Cycle in type synonym declarations:
main.hs:1:1-58: type Program a =
Maybe a -> (Operation a, Maybe Program a)
我是哈斯克尔的新手,所以我不明白为什么这是不允许的。如何在Haskell中表达这种类型?这里有两个问题:
- 它应该是
,而不是可能(程序a)
可能是程序a
- 类型同义词不能是递归的
newtype Program a = Program { runProgram :: Maybe a -> (Operation a, Maybe (Program a)) }
data Operation a = Read a | Write a
谢谢如果我使用这个
newtype
和runProgram
,你能告诉我如何调用这个函数吗?f::Program a->Maybe a->(操作a,Maybe(Program a))
fpm=(runProgram)m
--runProgram
是记录字段,因此可以像普通函数一样调用它。