module Network.Pushbullet.Misc where
import Network.Pushbullet.Types ( Cursor, Paginated(..) )
data Count
= All
| Limit Int
getPaginatedLimit
:: Monad m
=> Count
-> Paginated [a]
-> (Cursor -> m (Paginated [a]))
-> m [a]
getPaginatedLimit All (Page d Nothing) _
= pure d
getPaginatedLimit All (Page d (Just c)) next = do
p <- next c
later <- getPaginatedLimit All p next
pure (d ++ later)
getPaginatedLimit (Limit n) _ _ | n <= 0
= pure []
getPaginatedLimit (Limit n) (Page d Nothing) _
= pure (take n d)
getPaginatedLimit (Limit n) (Page d (Just c)) next = do
let d' = take n d
let n' = n length d'
p <- next c
later <- getPaginatedLimit (Limit n') p next
pure (d' ++ later)