I think the issue was by ths following , Those are constraints to a polymorphic type.

Haskell, despite being statically typed, makes it very easy to write function that can work with different types, through a system called

parametric polymorphism. I'll first give all your functions concrete (monomorphic) signatures instead:

```
mult :: [Integer] -> Integer
mult = foldl' (*) 1 -- foldl' is better for performance/memory than foldr
posList :: [Integer] -> [Integer]
posList = filter (>0)
trueList :: [Bool] -> Bool
trueList = foldl' (&&) True
evenList :: [Integer] -> Bool
evenList x = foldl' (+) 2 x `mod` 2 == 0
-- `if True then True else False` is tautological
```

```
mult :: ∀ a . [a] -> a
```

```
mult :: [a] -> a
```

```
mult :: Num a => [a] -> a
```

```
posList :: [a] -> [a]
```

```
posList :: (Num a, Ord a) => [a] -> [a]
```

```
evenList :: Integral a => [a] -> Bool
```

```
evenList :: (Integral a, Foldable t) => t a -> Bool
```

```
mult :: (Num a, Foldable t) => t a -> a
trueList :: Foldable t => t Bool -> Bool
```