Вопрос новичка о синтаксисе и подписи типа в Haskell / HappStack

#haskell #happstack

#haskell #happstack

Вопрос:

Почему я не могу сделать

 z = x?
  

но я могу это сделать?

 y s = x s
  

Я новичок в Haskell
Это то, что я пробовал в GHCi:

 Prelude> import Happstack.Server
Prelude Happstack.Server> let x s = ok $ toResponse $ "Some string"
Prelude Happstack.Server> :t x
x :: FilterMonad Response m => t -> m Response

Prelude Happstack.Server> let y s = x s
Prelude Happstack.Server> :t y
y :: FilterMonad Response m => t -> m Response

Prelude Happstack.Server> let z = x
<interactive>:1:9:
    No instance for (FilterMonad Response m0)
      arising from a use of `x'
  

Ответ №1:

Похоже, это еще один случай ограничения мономорфизма.

Вы можете либо включить аргумент явно, т.е. y s = x s включить явную подпись типа, либо запустить GHCi с -XNoMonomorphismRestriction .

Комментарии:

1. Спасибо. Это работает =) Хотя я думаю, что пройдет несколько месяцев, прежде чем я пойму, что это значит, и что я отдаю, используя этот флаг.