Unit testing 测试自定义数据类型的haskell io
更新:我注意到我的代码设计中存在问题。我的代码的整体结构已经发生了很大的变化,因此对这个问题的任何回答都或多或少与其当前状态无关。但是这么说,最好不要删除已回答的问题,所以我保留这个问题 我的代码的问题是类型类对于我想要做的事情来说太泛型了。现在我专注于编写函数,比如Unit testing 测试自定义数据类型的haskell io,unit-testing,haskell,error-handling,monads,Unit Testing,Haskell,Error Handling,Monads,更新:我注意到我的代码设计中存在问题。我的代码的整体结构已经发生了很大的变化,因此对这个问题的任何回答都或多或少与其当前状态无关。但是这么说,最好不要删除已回答的问题,所以我保留这个问题 我的代码的问题是类型类对于我想要做的事情来说太泛型了。现在我专注于编写函数,比如 makeModelId::String->StringValueError ModelId 然后用如下方式扩展: makeModelIdM::(Monad m)=>String->m(StringValueError Model
makeModelId::String->StringValueError ModelId
然后用如下方式扩展:
makeModelIdM::(Monad m)=>String->m(StringValueError ModelId)
makeModelIdM astr=do
idstr(这更像是一个评论,但也可能是一个答案。)
你确定你需要第二种类型的课程吗?fromStringM
的定义并不依赖于StringLike2Primitive
实例,而是简单地包装它
fromStringM :: (Monad m, StringLike2Primitive a) => String -> m a
fromStringM a
| null a = fail "empty string is not allowed"
| not (isAlphaNumStr aStr) = fail "Only ascii alphanumeric strings are allowed"
| not (isAsciiStr aStr) = fail "Only ascii strings are allowed"
| otherwise = return $ fromString a
对于fromText
我想也是这样,因为我还有另外两种数据类型,它们是根据重叠条件从字符串中读取的。我使用诸如makeModelIdM::(Monad m)=>String->m ModelId
之类的函数来控制它们的生产。不过,我不确定这是否是最好的办法。我是否应该尝试测试makeModelId
?