Scott encoded lists can be defined as followed:
newtype List a = List { uncons :: forall r. r -> (a -> List a -> r) -> r }