Rotating a list in Haskell with all posibilities

Bis*_*mal 1 haskell functional-programming list

How can I edit the following code to make Haskell show all the possibilities of rotating an input list from the user :

rotate ::  Int -> [a] -> [a]
rotate n text = take (length text) (drop n (cycle text)) 
Run Code Online (Sandbox Code Playgroud)

I assume that to print all the possibilities we need to drop the first element X times. where X is the length of the list entered.

circle ::  [a] -> [[a]]
circle text = take (length text) (drop (1) (cycle text))
Run Code Online (Sandbox Code Playgroud)

I can't perform the operation where the list is printed X times. Also I have errors while running the above code which states the following: Couldn't match type ‘a’ with ‘[a]’

I wanted the Output to be something like that:

circle "ab"
["ab","ba"]
Run Code Online (Sandbox Code Playgroud)

ama*_*loy 7

You can avoid any calls to length, as well as the repeated calls to cycle and ever-larger arguments to drop, by instead zipping any otherwise-infinite lists against the finite input list, to trim them to be the size you expect, discarding later elements:

circle xs = let trim ys = zipWith const ys xs
            in trim . map trim . iterate tail . cycle $ xs

*Main> circle "abc"
["abc","bca","cab"]
Run Code Online (Sandbox Code Playgroud)