我对 Haskell 有点陌生,并且正在开发一个项目,其中包含以下代码:
data Nested a = Elem a | Nested [Nested a] deriving (Eq, Show)
data Symbol a = Value a | Transformation (a -> a -> a) deriving (Show)
toSymbol :: [Char] -> Nested (Symbol Integer)
toSymbol x
|all isDigit x = Elem (Value (strToInt x))
|x == "+" = Elem (Transformation (\x y -> x + y))
有没有办法可以避免这个函数的类型被限制为嵌套(符号整数)?我想使用 Symbol 来表示许多不同的类型,并有一个函数 toSymbol 类似于以下内容:
toSymbol x
|x == "1" = Elem (Value 1)
|x == "+" = Elem (Transformation (\x y -> x + y))
|x == "exampleword" = Elem (Value "word")
|x == "concatenate()" = Elem (Transformation concatTwoStrings)
我不知道这样的函数的类型签名可能是什么。我能做些什么来获得类似的功能吗?