如何从Haskell中的(G)ADT参数中获取构造函数作为函数



如何从Haskell中的(G)ADT参数中获得构造函数作为函数?有可能做这样的事吗?

data  Ex1 =  C1 Int | C2 Int -- | ..... 
           | C3
fun :: Ex1 -> Ex1
fun C3    = C3
fun (c i) = c $ i^2

我不适合这样做。

fun (C1 i) = C1 $ i^2
fun (C2 i) = C2 $ i^2

如果您可以更改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

ghci:演示

λ> fun $ C1 3
C1 9
λ> fun $ C2 3
C2 9
λ> fun C3
C3

最新更新