测试数据类型的规范方法

import Data.Typeable(typeOf)

myFunc :: (Show a) => [a] -> [String]
myFunc
  | show (typeOf a) == "[Char]" = ...
  | otherwise = .. 

我使用上面的代码来测试输入是否属于该String类型。这是正确和可以接受的还是有其他更好的方法?

回答

与匹配值一样,我们更喜欢完全避免使用布尔值。在 typeable/dynamic 的上下文中,这意味着您不应该“测试”它是否是某种特定类型,然后如果是,则执行某些操作,而是(如值模式匹配)您只需尝试将其用作该类型,然后仅在失败时添加回退案例。

myFunc' :: (Show a, Typeable a) => a -> String
myFunc' x = case cast x of
       Just xStr -> xStr
       _ -> show x

请注意,我什至不需要提及xStr处理 where xis的情况String,因为上下文已经暗示了这一点。


以上是测试数据类型的规范方法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>