저는 하스켈과 반사 신경을 처음 사용했지만 실제로는 언어를 좋아합니다. 나는 https://github.com/hansroland/reflex-dom-inbits/blob/master/tutorial.md을 사용하여 배우고 있으며 매우 도움이되었습니다.reflex-dom에서 동적 자바 스크립트 함수 (FFI)에 값을 전달하는 방법
현재 동적으로 값을 변경하고 요소를 만들고 동적 값이 변경 될 때마다 FFI 함수를 호출하는 함수를 만들려고합니다. 다음은 내가하려는 일의 단순화 된 버전입니다.
{-# LANGUAGE OverloadedStrings #-}
import Data.Text as T
import qualified GHCJS.DOM.Types as GDT
import GHCJS.Types
import Reflex.Dom
foreign import javascript safe
"$1.value = $2"
testSet :: JSVal -> JSVal -> IO()
testTB :: DomBuilder t m => Dynamic t T.Text -> m()
testTB dt = do
(e, _) <- elAttr' "input" ("type" =: "text") blank
bob <- (testSet (GDT.pToJSVal e) . GDT.pToJSVal) <$> dt
return()
main = mainWidget $ testTB $ constDyn "Hello World!"
이 컴파일시 오류가 발생합니다 : 나는 m()로 동적 변환하는 다양한 방법을 시도했지만 그것을 알아낼 수 없습니다
reflex-canvas.hs:14:10: error:
• Couldn't match type ‘m’ with ‘Dynamic t’
‘m’ is a rigid type variable bound by
the type signature for:
testTB :: forall t (m :: * -> *).
DomBuilder t m =>
Dynamic t Text -> m()
at reflex-canvas.hs:11:11
Expected type: m (IO())
Actual type: Dynamic t (IO())
• In a stmt of a 'do' block:
bob <- (testSet (GDT.pToJSVal e) . GDT.pToJSVal) <$> dt
In the expression:
do { (e, _) <- elAttr' "input" ("type" =: "text") blank;
bob <- (testSet (GDT.pToJSVal e) . GDT.pToJSVal) <$> dt;
return() }
In an equation for ‘testTB’:
testTB dt
= do { (e, _) <- elAttr' "input" ("type" =: "text") blank;
bob <- (testSet (GDT.pToJSVal e) . GDT.pToJSVal) <$> dt;
return() }
• Relevant bindings include
e :: Element EventResult (DomBuilderSpace m) t
(bound at reflex-canvas.hs:13:4)
dt :: Dynamic t Text (bound at reflex-canvas.hs:12:8)
testTB :: Dynamic t Text -> m() (bound at reflex-canvas.hs:12:1)
. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
'liftIO'ing을 시도해 보셨습니까? 'liftIO (testSet (GDTpToJSVal e) .GDT.pToJSVal) = << (샘플 $ 현재 dt)'? 나는 Reflex에 대한 전문가가 아니다. 그러나 이것은 검증하지 않으면된다고 말해야 만한다. – epsilonhalbe
대다수의 오류는 생략 했으므로 대개 매우 유익합니다. 오류를 이해하면 해결 방법이 나와 있습니다. 좋은 대답은 문제를 해결하고 오류를 설명 할 것입니다 (낚시를하는 사람에게 모든 것을 가르쳐주세요 ...). – user2407038
@epsilonhalbe liftM과 liftIO의 몇 가지 변형을 시도해 보았지만 제대로 작동하지 않는 것 같습니다. – Thanacles