I have a suspicion that it's the first one, but I'm not sure, and don't know how to check so I thought I'd just post here. I was also kinda lazy to provide normal examples, but the type thing is basically irrelevant to my question.
data Storage = HDD String Int Int
| SSD String Int
deriving(Show,Eq)
maxSSD :: [Storage] -> Int -> Int
maxSSD (HDD{}:xs) mx = maxSSD xs mx
maxSSD [] mx = mx
maxSSD l@((SSD _ x):xs) (-1) = maxSSD l x
maxSSD ((SSD _ x):xs) mx
|x>mx = maxSSD xs x
|otherwise = maxSSD xs mx
maxSSD' :: [Storage] -> Int
maxSSD (HDD{}:xs) = maxSSD xs
maxSSD [] = 0
maxSSD ((SSD _ x):xs)
|x>(maxSSD xs) = x
|True = maxSSD xs