First let me say, don't use head and tail, ever. ...Well, at least not until you've gathered so much experience that you can recognise the few cases when it actually makes something more concise. Usually pattern matching (or folding etc.) is not only much safer but also far more readable & intuitive.
So in your case, you're trying to get head [a]. What is [a]? You evidently mean, “the argument of the function which has type [a], but that's not possible to write in Haskell code. (What if there was yet another element of the same type?) To use an argument, you have to _bring it in scope, with some arbitrary name (only, names can't contain brackets), e.g.
delete' del xs = if head xs == number then delete'(tail xs)
                  else del ++ [head xs] ++ delete'(tail xs)
would work. (Sort of. number also doesn't make sense there: you probably want to compare with del, instead of inserting that.)
However, since the only thing you do with xs is call those evil head and tail functions, you should rather write it this way:
delete' del (x:xs) = if x == number then delete' xs
                      else del ++ [x] ++ delete' xs
     
    
filtercommand?