鉴于,
{-# LANGUAGE DeriveFunctor #-}
import Control.Alternative.Free (Alt, liftAlt)
import Control.Applicative ((<|>), (*>), (<*), many)
data Primitive a = Primitive Char a
deriving (Show, Functor)
type RegExp = Alt Primitive
charAs :: Char -> a -> RegExp a
charAs c x = liftAlt (Primitive c x)
char :: Char -> RegExp Char
char c = charAs c c
string :: String -> RegExp String
string = traverse char
您将如何实际打印它?我明白了
> string "ASF"
<interactive>:67:1: error:
* No instance for (Show (RegExp String))