I want to define a typeclass that can convert my own types like MyBool, MyInt, MyOption to according Haskell types -- Bool, Int, Maybe.
Currently I can convert the first two types, but for MyOption, I don't how to do, since it is a polymophic type.
{-# LANGUAGE TypeFamilies #-}
module Coercible where
import qualified Prelude
data MyBool = MyTrue | MyFalse
data MyInt = Zero | One | Two
data MyOption a =
Some a
| None
class Coercible a where
type Return a :: *
toHaskell :: a -> (Return a)
instance Coercible MyBool where
type Return MyBool = Prelude.Bool
toHaskell MyTrue = Prelude.True
toHaskell MyFalse = Prelude.False
instance Coercible MyInt where
type Return MyInt = Prelude.Int
toHaskell Zero = 0
toHaskell One = 1
toHaskell Two = 2
instance Coercible (MyOption a) where
type Return (MyOption a) = Prelude.Maybe a
toHaskell (Some a) = Prelude.Just a
toHaskell None = Prelude.Nothing
--------------------------------------------------------------------------
The problem occurs when I am trying to use "toHaskell (Some MyBool)", the error message is "Not in scope: data constructor `MyBool'".
Any hints will be appreciated !!