Haskell 您的FFI声明需要类型签名 有时我面对奇怪的问题,考虑下面的例子:

Haskell 您的FFI声明需要类型签名 有时我面对奇怪的问题,考虑下面的例子:,haskell,fay,Haskell,Fay,这包括: renderFrame :: Frame -> Fay () renderFrame frame = do stack <- getStack if length stack > 0 then (do let e = head stack traceEventCoord e) else (do return ()) re

这包括:

renderFrame :: Frame -> Fay ()
renderFrame frame = do
     stack <- getStack
     if length stack > 0
           then (do
                   let e = head stack
                   traceEventCoord e)
           else (do return ())
     reqFrame renderFrame
     emptyStack
     where traceEventCoord :: Event -> Fay ()
           traceEventCoord e = do
               eX <- pageX e
               eY <- pageY e
               let str = show eX ++ " x " ++ show eY
               trace <- elById "trace"
               if isNull trace
                   then return ()
                   else elSetHtml (fromNullable trace) str


pageX :: Event -> Fay Int
pageX = ffi "%1['pageX']"

pageY :: Event -> Fay Int
pageY = ffi "%1['pageY']"

getParentGroups f=do
p费伊弦
nodeName=ffi“%1.nodeName.nodeName”
请注意,第一个示例中的
traceEventWord
不会调用此问题。 是虫子吗


另外,第二个示例只是一个示例,最终的代码将被重构一点,但它用于演示目的。

更新:这已在fay 0.19中实现并发布

抱歉耽搁了!时差让我:(

我认为这还没有实现。最初ffi只在顶层受支持,然后添加了ffi表达式,它需要在表达式
ffi“alert('foo')”::Fay()
)旁边添加类型签名。我不认为有人会对where语句也这样做

getParentGroups :: Fragment -> Fay [Fragment]
getParentGroups f = do
    p <- getParent f
    nn <- nodeName (fromNullable p)
    return [fromNullable p]

getParent :: Fragment -> Fay (Nullable Fragment)
getParent = ffi "%1.parent()"
nodeName :: Fragment -> Fay String
nodeName = ffi "%1.node.nodeName"
-- ...
where traceEventCoord :: Event -> Fay ()
      traceEventCoord e = do
          eX <- pageX e
          eY <- pageY e
          let str = show eX ++ " x " ++ show eY
          trace <- elById "trace"
          if isNull trace
              then return ()
              else elSetHtml (fromNullable trace) str
       pageX :: Event -> Fay Int
       pageX = ffi "%1['pageX']"
       pageY :: Event -> Fay Int
       pageY = ffi "%1['pageY']"
getParentGroups f = do
    p <- getParent f
    nn <- nodeName (fromNullable p)
    return [fromNullable p]
    where
        getParent :: Fragment -> Fay (Nullable Fragment)    
        getParent = ffi "%1.parent()"
        nodeName :: Fragment -> Fay String
        nodeName = ffi "%1.node.nodeName"