Есть ли способ разделить бесконечные и конечные списки?

Например, я пишу некоторую функцию для списков, и я хочу использовать функцию длины

foo :: [a] -> Bool
foo xs = length xs == 100

Как кто-то может понять, может ли эта функция использоваться с бесконечными списками или нет?

Или я должен всегда думать о бесконечных списках и использовать что-то вроде этого

foo :: [a] -> Bool
foo xs = length (take 101 xs) == 100

вместо использования длины напрямую?

Что если в haskell будет тип FiniteList, то длина и foo будут

length :: FiniteList a -> Int
foo :: FiniteList a -> Bool

Ответы на вопрос(5)

Ваш ответ на вопрос