kil*_*tek 14 haskell types typechecking
假设我定义了自己的数据类型
data MyData = A arg| B arg2| C arg3
Run Code Online (Sandbox Code Playgroud)
我如何编写一个函数(例如isMyDataType
:)来检查给定的参数是否是特定类型中的一个MyData
并连续返回一个布尔值(True或False),例如输入Ghci:
isMyDataType B
返回True并isMyDataType Int
返回False.
Tho*_*son 20
我相信你想要函数来测试特定的构造函数:
isA :: MyData -> Bool
isB :: MyData -> Bool
Run Code Online (Sandbox Code Playgroud)
如果是这样,那么你可以自己编写或者派生它们.实现看起来像:
isA (A _) = True
isA _ = False
isB (B _) = True
isB _ = False
Run Code Online (Sandbox Code Playgroud)
要自动派生它们,只需使用派生库并在源代码中添加:
{-# LANGUAGE TemplateHaskell #-}
import Data.DeriveTH
data MyData = ...
deriving (Eq, Ord, Show}
derive makeIs ''MyData
-- Older GHCs require more syntax: $( derive makeIs ''MyData)
Run Code Online (Sandbox Code Playgroud)
另请注意:您的数据声明无效,名称必须大写,MyData
而不是myData
.
最后,整个答案基于您想要测试构造函数的假设,而不是您所说的数据类型(在编译时静态检查,如Tarrasch所说).
归档时间: |
|
查看次数: |
6996 次 |
最近记录: |