Yel*_*sgg 2 monads haskell state-monad
不使用正式演绎,我如何测试自定义Monad实例是否符合Monad法则?
FWIW,这里是我最近编写的一组QuickCheck属性,用于测试Monad定律,以获得源自其F-Algebra的Maybe实现:
testProperty "Monad left identity law" $ do
a :: String <- arbitrary
k :: String -> MaybeFix Integer <- (fromMaybe .) <$> arbitrary
let left = return a >>= k
let right = k a
return $ left == right
,
testProperty "Monad right identity law" $ do
m :: MaybeFix Integer <- fromMaybe <$> arbitrary
let left = m >>= return
let right = m
return $ left == right
,
testProperty "Monad associativity law" $ do
m :: MaybeFix String <- fromMaybe <$> arbitrary
k :: String -> MaybeFix Integer <- (fromMaybe .) <$> arbitrary
h :: Integer -> MaybeFix Ordering <- (fromMaybe .) <$> arbitrary
let left = m >>= (\x -> k x >>= h)
let right = (m >>= k) >>= h
return $ left == right
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |