?

Log in

ru_declarative - GHCi - увидеть приоритет операторов [entries|archive|friends|userinfo]
ru_declarative

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

GHCi - увидеть приоритет операторов [Jul. 24th, 2007|01:22 pm]
ru_declarative

ru_declarative

[kmmbvnr]
А есть ли какая-нибудь возможность в ghci увидень как конкретно в каком порядке будут применены операторы в выражении? В случае ошибки типов выражение выводится со скобками... а если ошибки нет?
linkReply

Comments:
[User Picture]From: max630
2007-07-24 06:33 am (UTC)
можно сказать через опцию компилятора, чтобы дампило дерево на каком-то шаге. Его с трудом, но можно читать. По крайней мере для определения приоритетов достаточно.

будет ли это работать для выражений, которые вбиваются в ghci - не знаю
(Reply) (Thread)
From: (Anonymous)
2007-07-24 06:50 am (UTC)
приоритет операторов можно посмотреть командой :info

Prelude> :i `div`
class (Real a, Enum a) => Integral a where
  ...
  div :: a -> a -> a
  ...
        -- Imported from GHC.Real
infixl 7 div
Prelude> :i +
class (Eq a, Show a) => Num a where
  (+) :: a -> a -> a
  ...
        -- Imported from GHC.Num
infixl 6 +
Prelude>



ну или внесите ошибкув выражение преднамеренно ;)
(Reply) (Thread)
[User Picture]From: kmmbvnr
2007-07-24 06:59 am (UTC)
ага жаль что не работает
:info (4*3/7)

тока если что ошибку аккуратно внести:
*Prelude> 4*6/7 ++ 3

:1:3:
    No instance for (Fractional [a])
      arising from use of `/' at :1:3
    Probable fix: add an instance declaration for (Fractional [a])
    In the first argument of `(++)', namely `(4 * 6) / 7'
    In the definition of `it': it = ((4 * 6) / 7) ++ 3
(Reply) (Parent) (Thread)
From: ex_ex_zhuzh
2007-07-24 09:13 am (UTC)
let showParen = (undefined::[[[[()]]]]->())

[[[[()]]]] — просто «маловероятный» тип

Prelude> showParen $ 2+3*4

<interactive>:1:12:
    No instance for (Num [[[[()]]]])
      arising from use of `+' at <interactive>:1:12
    Probable fix: add an instance declaration for (Num [[[[()]]]])
    In the second argument of `($)', namely `2 + (3 * 4)'
    In the definition of `it': it = showParen $ (2 + (3 * 4))
Prelude>


(Reply) (Parent) (Thread)
[User Picture]From: justbulat
2007-07-25 03:51 pm (UTC)
концептуально!
(Reply) (Parent) (Thread)
From: (Anonymous)
2007-08-03 10:00 am (UTC)
http://www.nabble.com/how-to-see-operators-precedence-in-GHCi-t4142961.html :-)
(Reply) (Thread)
[User Picture]From: beroal
2007-11-29 06:25 am (UTC)

Prelude> :set -ddump-parsed
Prelude> 4-4/2
==================== Parser ====================
Just (4 - 4) / 2
2.0

Тук-тук, как насчёт правил арифметики? :)
The Glorious Glasgow Haskell Compilation System, version 6.6.1
(Reply) (Parent) (Thread)