Skip to content

Alternative instance for Data.Functor.Compose causes <<loop>>s with some types

many and some are omitted and are filled in by their defaults from Alternative, instead of re-using the definitions provided for f; this manifests as infinite grammars being created in the case of the Earley parsing library, resulting in <<loop>> errors at runtime.

The fix is just to add:

    many = Compose . fmap sequenceA . many . getCompose
    some = Compose . fmap sequenceA . some . getCompose

Related twitter thread: https://twitter.com/ollfredo/status/1067498140100628480

(It seems like this bug has been around for some time: https://github.com/feuerbach/regex-applicative/issues/19)

Trac metadata
Trac field Value
Version 8.6.2
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component libraries/base
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information