我正在尝试了解如何使用GHCJS-DOM创建GUI.我一直在看hello world示例https://github.com/ghcjs/ghcjs-dom-hello,这是微不足道的.添加新节点非常简单.我不能做的,并且无法从库文档(仅签名)中解决的是添加一些事件.例如,在鼠标单击时向主体添加新节点.
我希望避免使用像JQuery这样的JS库,因为我想通过GUI在GHC(webkit)和GHCJS之间移植.
最后,我希望能够将一个鼠标事件表达为FRP事件,但我会一次解决一个步骤.
如果有人有任何指导我会非常感激.我已经使用了haskell几年了,但这是我第一次进入DOM.
我最近一直在尝试线性类型,并且想知道以下转换是否可能。如果没有线性类型,它肯定是无效的。
目的是降低高阶函数参数。这应该没问题,因为线性类型确保 HOF 被调用一次,因此恰好a存在 1 个值。问题是如何逃避 lambda 并观察a
lower :: ((a %1-> b) %1-> r) %1-> b %1-> (r,a)
Run Code Online (Sandbox Code Playgroud) 我想要达到的目标是:
apply :: a -> [a -> b] -> [b]
Run Code Online (Sandbox Code Playgroud)
这是地图的反面:
map :: (a -> b) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)
我试过Hoogle,但无济于事.任何人都可以在Haskell中建议一个干净的方法吗?
我试图理解haskell类型文字的用法.特别是,我以为我会编写一个函数来显示自定义类型的类型文字
newtype Fixed (p :: Nat) a = Fixed a
instance (KnownNat p) => Show (Fixed p a) where
show _ = show $ natVal (Proxy::Proxy p)
Run Code Online (Sandbox Code Playgroud)
但是,ghc(7.8)不能推断出KnownNat n0,这意味着我不会像我认为的那样限制事物.任何人都可以提出什么问题?
我正在从许多不同的地方汇集代码,我正在尝试处理以下问题:
我有一个变压器堆栈,具有以下简化类型:
action :: m (ReaderT r IO) a
Run Code Online (Sandbox Code Playgroud)
我正在尝试在不同堆栈的上下文中使用该操作,该堆栈具有不同的读取器环境:
desired :: m (ReaderT r' IO) a
Run Code Online (Sandbox Code Playgroud)
我当然可以提供
f :: r' -> r
Run Code Online (Sandbox Code Playgroud)
things :: m (ReaderT r' IO) ()
things = do
-- ... some stuff
-- <want to use action here>
action :: m (ReaderT r IO) a -- broken
-- ... more stuff
pure ()
Run Code Online (Sandbox Code Playgroud)
withReaderT :: (r' -> r) -> ReaderT r m a -> ReaderT r' m a
Run Code Online (Sandbox Code Playgroud)
这有一个问题,ReaderT是外部monad,而我想在内部使用它.
我也认为这可能与MonadBase或MonadTransControl有关,但我不熟悉它们的工作原理.
我正在尝试使用箭头捕获对称数据处理管道,并且想知道双向组合是否可行.
Control.Arrow公开以下内容
-- | Left to right composition
(>>>) :: Category cat => cat a b -> cat b c -> cat a c
-- | Right to left composition
(<<<) :: Category cat => cat b c -> cat a b -> cat a c
Run Code Online (Sandbox Code Playgroud)
我想要什么,但无法解决如何表达是双向组合.类型是这样的.
(<^>) :: Category cat => cat (a,y) (b,z) -> cat (b,x) (c,y) -> cat (a,x) (c,z)
Run Code Online (Sandbox Code Playgroud)
其中每对的第一个元素是从左到右组成,第二个元素是从右到左组成.
haskell ×6
types ×2
arrows ×1
dom ×1
ghc ×1
ghcjs ×1
ghcjs-dom ×1
linear-types ×1
reader-monad ×1