LINUX.ORG.RU

[Haskell] where

 


0

0

Есть такой код:

main = do 
  resp <- simpleHTTP $ getRequest "url"
  putStrLn "hi there

Если добавить where

main = do 
  resp <- simpleHTTP $ getRequest url 
    where url ="url"
  putStrLn "hi there"
выдает «The last statement in a 'do' construct must be an expression».

Если же добавить where после putStrLn собирается без ошибок.

main = do 
  resp <- simpleHTTP $ getRequest "url" 
  putStrLn text
    where text = "hi there"

В чем же дело?


В чем же дело?

компилятор честно сказал, в чём дело. что касается кода, то

main = do  
  resp <- simpleHTTP $ getRequest url  
  putStrLn text 
    where text = "hi there" 
          url  = "url"
jtootf ★★★★★
()
Ответ на: комментарий от jtootf

Хм, тогда мне не понятно к чему же привязан where. Ко всей функции целиком? Если да, то почему тогда нужны ещё 2 пробела? Или ко всем «линиям» на один уровень левее? Извините за безграммотность: только начал осваиватся. :)

xkitenz
() автор топика

http://haskell.org/tutorial/patterns.html#sect4.5

Sometimes it is convenient to scope bindings over several guarded equations, which requires a where clause:

f x y  |  y>z           =  ...
       |  y==z          =  ...
       |  y<z           =  ...
     where z = x*x

Note that this cannot be done with a let expression, which only scopes over the expression which it encloses. A where clause is only allowed at the top level of a set of equations or case expression. The same properties and constraints on bindings in let expressions apply to those in where clauses.

These two forms of nested scope seem very similar, but remember that a let expression is an expression, whereas a where clause is not---it is part of the syntax of function declarations and case expressions.

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

Кстати, haskell сложный? Долго читать стандарт? Много появилось с 98-го года расширений и сложно ли в них разобраться?

anonymous
()
Ответ на: комментарий от srj

Потому, что потом все равно придется читать стандарт. Если язык небольшой, то можно выучить его и по стандарту.

anonymous
()
Ответ на: комментарий от anonymous

Выучить по стандарту почти точно не получится, лучше не пробовать. Ссылка на почитать была выше, а ещё здесь можно глянуть.

gizzka ★★
()
Ответ на: комментарий от anonymous

haskell сложный?

нет. сам язык простой

Долго читать стандарт?

http://www.haskell.org/onlinereport/

Много появилось с 98-го года расширений?

http://www.haskell.org/ghc/docs/latest/html/users_guide/ghc-language-features.html

сложно ли в них разобраться?

в некоторых - просто, в некоторых - сложно

jtootf ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.