Книга haskell хочет, чтобы я реализовал проходимый экземпляр для
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]
Что это значит? Я сделал что-то не так?
Constant 5
не содержит константы5
. - person Daniel Wagner   schedule 26.05.2016