scanrP, -- :: (a -> b -> b) -> b -> [:a:] -> [:b:]
scanr1P, -- :: (a -> a -> a) -> [:a:] -> [:a:]
-- iterate, repeat, -- parallel arrays must be finite
+ singletonP, -- :: a -> [:a:]
replicateP, -- :: Int -> a -> [:a:]
-- cycle, -- parallel arrays must be finite
takeP, -- :: Int -> [:a:] -> [:a:]
-- iterate, repeat -- parallel arrays must be finite
+singletonP :: a -> [:a:]
+{-# INLINE singletonP #-}
+singletonP e = replicateP 1 e
+
replicateP :: Int -> a -> [:a:]
{-# INLINE replicateP #-}
replicateP n e = runST (do