小编Umu*_*dik的帖子

Haskell递归/循环模块定义?

我有两个相互导入的模块.Haskell不支持递归模块.那么如何在不需要循环模块系统的情况下重写我的数据类型.

这是我的Character.hs

module Character where
import ItemSystem

data Character = Character { name :: String, items :: [Item] }
Run Code Online (Sandbox Code Playgroud)

这是ItemSystem.hs

module Item where
import Character

data ItemEffect = CharacterEffect (Character -> Character)
                | ItemEffect      (Item -> Item)

data Item = Item { name :: String, weight :: Int, effect :: ItemEffect }
Run Code Online (Sandbox Code Playgroud)

更新:我将我的所有数据类型写入一个模块:(.

haskell types module

17
推荐指数
2
解决办法
2793
查看次数

使用一组默认值(elm或haskell)初始化模块

假设我们有一个模块负责向Flickr发出api请求.我不想将api密钥硬编码到Flickr模块中.Api密钥可以通过ajax请求获取.

现在,Flickr模块中的每个函数都接受apiKey作为其参数.但它并不是那么酷的传递那个api键.有没有简单的方法来解决这个问题?或者是否可以在模块之间共享一些值而不传递每个函数.

module Flickr where

searchPhotos : String -> String -> ...
searchPhotos apiKey query = ...

getPhotoInfo : String -> String -> ...
getPhotoInfo apiKey photoId = ...

anotherOne : String -> ...
anotherOne apiKey = ...
Run Code Online (Sandbox Code Playgroud)

更新:我到目前为止尝试的是部分应用功能.最后我把apiKey作为参数.但现在我必须传递这个功能,还有其他想法吗?

makeFlickrRequest : (String -> String -> a) -> a
makeFlickrRequest flickrMethod = flickrMethod "myApikey" "mySecret"

photosSearch : String -> String -> String -> ...
photosSearch query apiKey secret =
    makeHTTPCallhere ...

-- Usage:
makeFlickrRequest (photosSearch "haskell")
Run Code Online (Sandbox Code Playgroud)

haskell elm

3
推荐指数
1
解决办法
143
查看次数

在react.js中有任何方法可以禁用所有子事件

我想构建一个有两种状态的应用程序; 暂停和活跃.例如,我想禁用所有子/拥有组件的事件,如onClick,onChange,onKeyDown,.etc.

我曾想过isActive=false通过它所有的孩子/拥有的组件给予道具,并isActive在事件处理程序上检查属性.如果isActive属性是假的事件处理程序将什么都不做.我可以使用简单的辅助函数使这个机制更容易.但我担心的是,当我将应用程序状态更改为暂停时,所有子组件都需要重新呈现.

我正在寻找绕过所有事件处理程序(而不是自定义处理程序)而不重新渲染所有组件的方法.

更新:我看到在chrome端渲染矩形它不会重新渲染孩子.但如果有更好的反应方式,我想学习它.

javascript reactjs react-jsx

2
推荐指数
1
解决办法
2927
查看次数

F# 上的 IO 操作如何工作

haskell 上有 IO monad 以保持纯净。我知道 f#/ocaml 支持可变状态,但 IO 操作实际上是如何工作的。与haskell的IO monad对应的概念是什么?

monads f# haskell functional-programming

1
推荐指数
1
解决办法
489
查看次数