foldr is supposed to start folding from the right side (as the name suggests).
and this is why it is synonymous to "list construction" as I'm told

for e.g:
> foldr (:) [ ] [1,2,3,4,5]
[1,2,3,4,5]

In the same spirit I'm trying to construct a Foldable instance of my own type:

data Li a = Nil | Cons a (Li a)
    deriving (Show)

instance Foldable Li where
    foldr f b Nil = b
    foldr f b (Cons a y) = foldr f (f a b) y

So I'm trying out foldr for my type:
> foldr Cons Nil (Cons 1 (Cons 2 Nil))
Cons 2 (Cons 1 Nil)

This shows my foldr implementation i'm not folding from right side, 
but how can I possibly do that - the data could have been an infinite stream.
It feels like I will never be able to truly write a foldr implementation with "right" folding mechanism.

Any thoughts?