Я хочу превратить свой конструктор данных MP в экземпляр Num

MP выглядит так data MP = MP String и строка состоит только из + и - например, "++ - + - +" где каждый + представляет +1, а - представляет -1.

У меня также есть функция, которая нормализует эту строку, например. от «++ - + - +» до «++»

nrm "" = ""
nrm (c:t) = take c (nrm t)
  where
    take c "" = [c]
    take c (s:xs)
      | c == s     = c:s:xs
      | otherwise  = xs

А теперь я хотел бы превратить это в экземпляр Num вот так:

instance Num MP where
  (+) = undefined
  (*) = undefined
  negate = undefined
  signum = undefined
  abs = undefined
  fromInteger = undefined

Итак, в конце это должно работать так: "+++" + "-" = "++" или "+++" * "-" = "---" и так далее.

Есть ли у кого-нибудь идея, как я могу это сделать?

0
Pukka 29 Ноя 2020 в 19:04

1 ответ

Лучший ответ

Ты говоришь:

Я пробовал (+) (MP a) (MP b) = (a++b)

Вы правильно пишете функцию, которая принимает значения типа MP, но вы также должны возвращать значение типа MP, как в (+) (MP a) (MP b) = MP (a ++ b). Конечно, в этой реализации все еще есть ошибки, но это должно помочь вам преодолеть первый подъем и перейти к чему-то, с чем вы можете поиграть самостоятельно.

1
Daniel Wagner 29 Ноя 2020 в 16:47