Recursion:

Create a function which will check whether a given string contains an input substring, with the following type signature:

containsSubString :: String -> String -> Bool

A double linked list is one which is not defined from left to right or right to left; Every element except for the first and the last is connected to both the element previous and next in the list. Create a recursive data type to define this structure:

data doubleLinkedList a

Now that you have defined this data type, you need to use it! Finish these function definitions with

addElem:: a -> doubleLinkedList a -> doubleLinkedList a
removeElem :: a -> doubleLinkedList a -> doubleLinkedList a