我正在试着编译这小块代码。
module Sodium where
import Prelude
import Control.Monad.Free
import Data.Coyoneda
import Data.Tuple
data ReactiveF more
= RFNewEvent (forall a. (Tuple (Event a) (a -> Reactive Unit) -> more))
type Reactive a = FreeC ReactiveF a
data Event a = Event a
newEvent :: forall a. Reactive (Tuple (Event a) (a -> Reactive Unit))
newEvent = liftFC $ RFNewEvent id如果我在RFNewEvent中使用"Number“而不是"a”,那么一切都编译得很好。但就在我“追求一切”的那一刻。并将“数字”改为"a“,不再编译。
我收到以下错误消息
Cannot unify type
a1
with type
a0有人知道怎么做吗?
我用的是0.5.0版的免费纯文本。
编辑
如果我使用以下方法
data NewEventData = NewEventData forall a. Tuple (Event a) (a -> Reactive Unit)并将其替换为RFNewEvent,然后进行编译。但是我最终得到了一个不想要的newEvent类型签名。
newEvent :: Reactive NewEventData
newEvent = liftFC $ RFNewEvent id它允许我创建一个事件,但允许我将不同的事件值拍摄到事件流,而不是相同类型的值。(失踪的a.现在newEvent上)
我可能犯了个错误。
总体目标是模拟SodiumFRP的界面使用一个自由Monad。然后插入一个现有的JavaScript玻璃钢库,工作类似于钠通过FFI解释自由Monad。
这个是可能的吗?
发布于 2015-10-24 23:37:10
下面的代码现在编译"newEvent“并具有所需的类型签名
module FRP.Sodium where
import Prelude
import Control.Monad.Free
import Data.Coyoneda
import Data.Tuple
data ReactiveF more
= RFNewEvent (NewEventData -> more)
type Reactive a = FreeC ReactiveF a
data NewEventData = NewEventData forall a. Tuple (Event a) (a -> Reactive Unit)
data Event a
= ENever
| EMerge (Event a) (Event a)
| EFilterJust (Event (Maybe a))
| ECoalesce (a -> a -> a) (Event a)
| EOnce (Event a)
| ESplit (Event (Array a))
| EVar Int
data Behaviour a = BVar Int
extractNewEventData :: forall a. NewEventData -> (Tuple (Event a) (a -> Reactive Unit))
extractNewEventData (NewEventData x) = x
newEvent :: forall a. Reactive (Tuple (Event a) (a -> Reactive Unit))
newEvent = map extractNewEventData $ liftFC $ RFNewEvent id编辑
也尝试了纯文本-存在。使定义“样本”成为可能
RFSample被添加到ReactiveF ..。
.
.
.
data ReactiveF more
= RFNewEvent (NewEventData -> more)
| RFSample (SampleData more)
.
.
.
data SampleDataF more a = SampleDataF (Behaviour a) (a -> more)
type SampleData more = Exists (SampleDataF more)
sample :: forall a. Behaviour a -> Reactive a
sample beh = liftFC $ RFSample $ mkExists $ SampleDataF beh id谢谢菲尔·弗里曼的评论。
https://stackoverflow.com/questions/33318973
复制相似问题