在 Haskell 中,如果我为一个只有一个构造函数的类型指定字段名称,编译器会生成相应的函数
我希望避免默认行为,即表达式
MyType -> fieldType
。但是,如果 MyType
具有不同数量或类型的多个构造函数,则此方法将无法使用。我想知道是否有一种方法可以告诉编译器将这些函数的签名设置为 MyType -> Maybe fieldType
,即:而不是:data MyType = Empty | Record { st :: String, ui :: Word }
-- where
-- st Empty == undefined
-- ui Empty == undefined
-- I have
data MyType = Empty | Record { st :: String, ui :: Word }
-- where
-- st :: MyType -> Maybe String
-- st Empty = Nothing
-- st (Record s _) = Just s
--
-- ui Empty = Nothing
-- ui (Record _ n) = n
我希望避免默认行为,即表达式
st Empty
返回undefined
,因为如果st Empty
返回Nothing
,我可以使用模式匹配决定下一步该做什么,而不必在不纯的代码中进一步捕获异常。我意识到这不是Haskell的默认部分,所以我想知道是否有编译器扩展可以实现这一点?或者,我是否可以使用模板自己实现类似的东西?