私は 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))
この関数の型が Nested (Symbol Integer) に制限されるのを避ける方法はありますか? 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)
このような関数の型シグネチャが何であるかはわかりません。これに似た機能を得るためにできることはありますか?