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:
Maybe (Program a), not Maybe Program aA working version would be:
newtype Program a = Program { runProgram :: Maybe a -> (Operation a, Maybe (Program a)) }
data Operation a = Read a | Write a
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With