Haskell книга хочет, чтобы реализовать проходимый экземпляр дляTraversable данных константы а б = константа а проходит Quickchecks, но действует смешно
newtype Constant a b = Constant { getConstant :: a }
включая весь необходимый суперкласс. Приведенный ниже код передает Quickcheck/Checkers
, но действует смешно
import Test.QuickCheck
import Test.QuickCheck.Checkers
import Test.QuickCheck.Classes
newtype Constant a b = Constant { getConstant :: a }
instance Functor (Constant a) where
fmap f (Constant a) = Constant a
instance Foldable (Constant a) where
foldr f z (Constant x) = z
instance Traversable (Constant a) where
traverse f (Constant a) = pure $ Constant a
type TI = []
main = do
let trigger = undefined :: TI (Int, Int, [Int])
quickBatch (traversable trigger)
Когда я пытаюсь использовать проходимую экземпляр вроде так:
traverse (\x -> [x + 1]) $ Constant 5
Я не получаю Constant [5]
который я надеялся, а
traverse (\x -> [x + 1]) $ Constant 5
:: (Num b, Num a) => [Constant a b]
Что это значит? Я сделал что-то не так?
A Haskell koan: 'Constant 5' не содержит константу' 5'. –