簡體   English   中英

測試自定義數據類型的haskell io

[英]test haskell io for custom data type

更新:我注意到我的代碼設計存在問題。 我的代碼的整體結構發生了很大變化,以至於對這個問題的任何答案都或多或少與其當前狀態無關。 但是 SO 說最好不要刪除已回答的問題,所以我保留了這個問題。

我的代碼的問題是類型類對於我想做的事情來說太通用了。 現在我專注於編寫函數,例如

makeModelId :: String -> Either StringValueError ModelId

然后用類似的東西擴展它:

makeModelIdM :: (Monad m) => String -> m (Either StringValueError ModelId)
makeModelIdM astr = do
  idstr <- astr
  return (makeModelId idstr)

我不確定這是否是最好的方法。


我知道有很多類似的問題,比如 這個這個這個,據我所知,我想要做的事情可以用HUnit來實現。 但我似乎無法找到這樣做的確切方法。

我基本上有一個 setter 類型類,它是

class StringLike2Primitive model where
    fromString :: String -> model
    fromText :: Text -> model
    fromText aText = fromString (unpack aText)

class (StringLike2Primitive model) => StringLike2PrimitiveM model where
    fromStringM :: (MonadPlus m) => String -> m model
    fromTextM :: (MonadPlus m) => Text -> m model
    fromStringM astr =  return (fromString astr)
    fromTextM aText = fromStringM (unpack aText)

我有幾個數據類型實現了這些類型類,例如:

instance StringLike2Primitive ModelId where
    fromString = StringIdCons

instance StringLike2PrimitiveM ModelId where
    fromStringM aStr
        | null aStr = fail "empty string is not allowed as id"
        | not (isAlphaNumStr aStr) = fail
            "Only ascii alphanumeric strings are allowed"
        | not (isAsciiStr aStr) = fail
            "Only ascii alphanumeric strings are allowed"

我不確定如何在單元測試環境中針對受保護的值測試fromStringM函數,而且我認為我的錯誤處理方法有問題。 任何提示將不勝感激。

(這更像是一個評論,但也可能是一個答案。)

你確定你需要第二類嗎? 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也是fromText

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM