如何从Haskell中的(G)ADT参数获取构造函数作为函数?可以这样做吗?
data Ex1 = C1 Int | C2 Int -- | .....
| C3
fun :: Ex1 -> Ex1
fun C3 = C3
fun (c i) = c $ i^2
Run Code Online (Sandbox Code Playgroud)
这对我来说不合适.
fun (C1 i) = C1 $ i^2
fun (C2 i) = C2 $ i^2
Run Code Online (Sandbox Code Playgroud)
如果您可以更改当时的类型Ex1:
{-# LANGUAGE DeriveFunctor #-}
data Ex1 a = C1 a | C2 a
| C3 deriving (Show, Functor)
fun :: Ex1 Int -> Ex1 Int
fun y = fmap (\x -> x^2) y
Run Code Online (Sandbox Code Playgroud)
演示ghci:
?> fun $ C1 3
C1 9
?> fun $ C2 3
C2 9
?> fun C3
C3
Run Code Online (Sandbox Code Playgroud)