Hoogle Search
Within LTS Haskell 24.52 (ghc-9.10.3)
Note that Stackage only displays results for the latest LTS and Nightly snapshot. Learn more.
-
math-functions Numeric.Series Infinite series. It's represented as opaque state and step function.
Sequence :: s -> (s -> (a, s)) -> Sequence amath-functions Numeric.Series No documentation available.
enumSequenceFrom :: Num a => a -> Sequence amath-functions Numeric.Series enumSequenceFrom x generate sequence: <math>
enumSequenceFromStep :: Num a => a -> a -> Sequence amath-functions Numeric.Series enumSequenceFromStep x d generate sequence: <math>
scanSequence :: (b -> a -> b) -> b -> Sequence a -> Sequence bmath-functions Numeric.Series Analog of scanl for sequence.
sequenceToList :: Sequence a -> [a]math-functions Numeric.Series Convert series to infinite list
substitutiveEqLaws :: (Eq a, Arbitrary a, CoArbitrary a, Function a, Show a) => Proxy a -> Lawsquickcheck-classes-base Test.QuickCheck.Classes.Base Tests the following properties:
Note: This does not test eqLaws. If you want to use this, You should use it in addition to eqLaws.decideEquality :: forall k (a :: k) (b :: k) . SDecide k => Sing a -> Sing b -> Maybe (a :~: b)singletons Data.Singletons.Decide A suitable default implementation for testEquality that leverages SDecide.
-
some Data.GADT.Compare A class for type-contexts which contain enough information to (at least in some cases) decide the equality of types occurring within them. This class is sometimes confused with TestEquality from base. TestEquality only checks type equality. Consider
>>> data Tag a where TagInt1 :: Tag Int; TagInt2 :: Tag Int
The correct TestEquality Tag instance is>>> :{ instance TestEquality Tag where testEquality TagInt1 TagInt1 = Just Refl testEquality TagInt1 TagInt2 = Just Refl testEquality TagInt2 TagInt1 = Just Refl testEquality TagInt2 TagInt2 = Just Refl :}While we can defineinstance GEq Tag where geq = testEquality
this will mean we probably want to haveinstance Eq Tag where _ == _ = True
Note: In the future version of some package (to be released around GHC-9.6 / 9.8) the forall a. Eq (f a) constraint will be added as a constraint to GEq, with a law relating GEq and Eq:geq x y = Just Refl ⇒ x == y = True ∀ (x :: f a) (y :: f b) x == y ≡ isJust (geq x y) ∀ (x, y :: f a)
So, the more useful GEq Tag instance would differentiate between different constructors:>>> :{ instance GEq Tag where geq TagInt1 TagInt1 = Just Refl geq TagInt1 TagInt2 = Nothing geq TagInt2 TagInt1 = Nothing geq TagInt2 TagInt2 = Just Refl :}which is consistent with a derived Eq instance for Tag>>> deriving instance Eq (Tag a)
Note that even if a ~ b, the geq (x :: f a) (y :: f b) may be Nothing (when value terms are inequal). The consistency of GEq and Eq is easy to check by exhaustion:>>> let checkFwdGEq :: (forall a. Eq (f a), GEq f) => f a -> f b -> Bool; checkFwdGEq x y = case geq x y of Just Refl -> x == y; Nothing -> True >>> (checkFwdGEq TagInt1 TagInt1, checkFwdGEq TagInt1 TagInt2, checkFwdGEq TagInt2 TagInt1, checkFwdGEq TagInt2 TagInt2) (True,True,True,True)
>>> let checkBwdGEq :: (Eq (f a), GEq f) => f a -> f a -> Bool; checkBwdGEq x y = if x == y then isJust (geq x y) else isNothing (geq x y) >>> (checkBwdGEq TagInt1 TagInt1, checkBwdGEq TagInt1 TagInt2, checkBwdGEq TagInt2 TagInt1, checkBwdGEq TagInt2 TagInt2) (True,True,True,True)
geq :: forall (a :: k) (b :: k) . GEq f => f a -> f b -> Maybe (a :~: b)some Data.GADT.Compare Produce a witness of type-equality, if one exists. A handy idiom for using this would be to pattern-bind in the Maybe monad, eg.:
extract :: GEq tag => tag a -> DSum tag -> Maybe a extract t1 (t2 :=> x) = do Refl <- geq t1 t2 return x
Or in a list comprehension:extractMany :: GEq tag => tag a -> [DSum tag] -> [a] extractMany t1 things = [ x | (t2 :=> x) <- things, Refl <- maybeToList (geq t1 t2)]
(Making use of the DSum type from Data.Dependent.Sum in both examples)