Cycle in type synonym declarations

I want to try out Haskell type and data with the following code

type Program a = Maybe a -> (Operation a, Maybe Program a)
data Operation a = Read a | Write a

Program follows a continuation passing style (CPS) and Nothing indicates termination. a may be instantiated with Int or something else.

However, GHC complains that:

main.hs:1:1:
    Cycle in type synonym declarations:
      main.hs:1:1-58: type Program a =
                          Maybe a -> (Operation a, Maybe Program a)

I'm new to Haskell so I don't understand why this is not allowed. How can I express this type in Haskell?


There are two problems here:

  • it should be Maybe (Program a) , not Maybe Program a
  • type synonyms cannot be recursive
  • A working version would be:

    newtype Program a = Program { runProgram :: Maybe a -> (Operation a, Maybe (Program a)) }
    data Operation a = Read a | Write a
    
    链接地址: http://www.djcxy.com/p/33152.html

    上一篇: 我如何从整数转换为分数

    下一篇: 循环类型同义词声明