私はpurescript-expressから次のコードを持っています(しかし、質問はより一般的です)。これらのタイプを統一する方法は?
setHandler :: forall e. Handler e
setHandler = do
idParam <- getRouteParam "id"
send "Yeah! "
appSetup :: forall e. App e
appSetup = do
get "/set/:id" setHandler
setHandler
私は私に次のようになりますどのsetHandler
getPointsSet :: forall f. String -> Aff (fs :: FS | f) Foobar
以内に次の関数を使用したいがget
が今
> :t get
forall e r.
(RoutePattern r) => r
-> HandlerM (express :: EXPRESS | e) Unit
-> AppM (express :: EXPRESS | e) Unit
のように定義されたように与えられた署名を持っている必要がありますコンパイラエラー
[1/1 TypesDoNotUnify] src/Main.purs:31:5
v
31 send "Yeah! "
^
Could not match type
HandlerM
with type
Aff
while trying to match type HandlerM
(express :: EXPRESS
| _2
)
with type Aff
(fs :: FS
| _0
)
while checking that expression send "Yeah! "
has type Aff
(fs :: FS
| _0
)
_1
in value declaration setHandler
getPointsSet
を使用すると、setHandlerはAff
になる必要がありますが、get
で配線することはできません。
編集
私は
setHandler :: forall e. Handler e
setHandler = do
idParam <- getRouteParam "id"
liftAff $ getPointsSet "../some-data.csv"
send "Yeah! "
以下の回答で提案されているようliftAff
を追加しようとすると、私は私が何をする必要がありますどのような次のエラー
[1/1 NoInstanceFound] src/Main.purs:28:1
28 setHandler :: forall e. Handler e
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
No type class instance was found for
Control.Monad.Aff.Class.MonadAff (fs :: FS | _0)
(HandlerM (express :: EXPRESS | e0))
The instance head contains unknown type variables. Consider adding a type annotation.
in value declaration setHandler
を取得それを解決する?
yup - それでした。ソートの;-)実際には、実際にはsetHandlerのシグネチャを持たない – robkuz