-1

鉴于,

{-# 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))

来源:https ://blog.jle.im/entry/free-alternative-regexp.html

4

1 回答 1

2

没有特别的理由假设它是可打印的。您希望它如何打印?将Alt f a包含无法打印的功能。如果您想要可打印的正则表达式,则必须构造一个既包含函数又包含可打印表示的类型。

于 2022-01-27T07:01:23.410 回答