Getting back unsafe head's type, safely
This library defines a type for strictly infinite (but lazy) lists.
As such, some of the Data.List
API is not implemented here -- anything that
relies on finiteness, for example -- while other functions get simplified types.
Also note that equality of countable sets is undecidable in general, but inequality
can be determined after a finite number of steps. As such using eq
and compare
may not terminate.
For example:
head :: forall a. List a -> a
tail :: forall a. List a -> List a
are now totally safe.
Data.List.Infinite
is meant to be imported qualified, as almost all its exposed
functions clash with other modules.
Note also that the Semigroup
instance provided is not extended by the finite
version.
bower i --save purescript-infinite-lists
It's amusing that, had they been provided, length
could be given in O(1) time
instead of O(n), and last
could be given a simple definition, retaining the
same type signature: last _ = Nothing
.