- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 STArray 编写 Fisher-Yates 洗牌算法。与我在网上找到的所有其他示例不同,我试图避免使用 native 列表。我只想就地洗牌数组。
这就是我所拥有的:
randShuffleST arr gen = runST $ do
_ <- getBounds arr
return (arr, gen)
arr
是 STArray,gen
将是类型 (RandomGen g) 的生成器状态。
我希望我可以依靠 (MArray (STArray s) e (ST s))
instance declaration在 MArray 中定义,以便能够使用 MArray 的 getBounds ,但 GHCi 无法推断 randShuffleST 的类型。它失败了:
Could not deduce (MArray a e (ST s))
arising from a use of `getBounds'
from the context (Ix i)
bound by the inferred type of
randShuffleST :: Ix i => a i e -> t -> (a i e, t)
at CGS/Random.hs:(64,1)-(66,25)
Possible fix:
add (MArray a e (ST s)) to the context of
a type expected by the context: ST s (a i e, t)
or the inferred type of
randShuffleST :: Ix i => a i e -> t -> (a i e, t)
or add an instance declaration for (MArray a e (ST s))
In a stmt of a 'do' block: _ <- getBounds arr
In the second argument of `($)', namely
`do { _ <- getBounds arr;
return (arr, gen) }'
In the expression:
runST
$ do { _ <- getBounds arr;
return (arr, gen) }
有趣的是,如果我像这样删除对“runST”的调用:
randShuffleST arr gen = do
_ <- getBounds arr
return (arr, gen)
它编译得很好,带有类型签名
randShuffleST :: (Ix i, MArray a e m) => a i e -> t -> m (a i e, t)
。我在 Arch Linux 上使用 GHC 7.4.2。
请在您的回复中给出明确的类型签名,以帮助我理解您的代码,谢谢。
编辑:我真的很喜欢 Antal S-Z 的答案,但我无法选择它,因为坦白说我并不完全理解它。也许一旦我更好地理解了自己的问题,我将来就会回答自己的问题......谢谢。
最佳答案
您可能不应该在函数中使用runST
。 runST
应该在某些内部使用突变但具有纯接口(interface)的计算外部使用一次。您可能希望您的 shuffle 函数(就地对数组进行洗牌)具有类似 STArray s i e -> ST s () 的类型(或者可能是更通用的类型),然后具有不同的函数如果您需要的话,它使用 runST 来呈现纯接口(interface)(不过,该函数可能需要复制值)。一般来说,ST
的目标是 STRef
和 STArray
永远无法从一次 runST
调用中逃脱,并且用于另一个。
在没有 runST
的情况下为函数推断的类型很好,只是更加多态(它适用于 IO 数组、ST 数组、STM 数组、未装箱数组等)。不过,如果您指定显式类型签名,您将更容易遇到推理错误。
关于arrays - 如何将 `getBounds' 与 STArray 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12847400/
在阅读关于多边形的 Java 文档时,我发现有一个 getBounds方法和 getBounds2D方法。注意到第一个不如第二个准确。 我想知道“不太准确”到底是什么意思?是否getBounds返回一
我正在尝试让 getBounds() 工作。 当我有这个代码时: google.maps.event.addListener(map, 'bounds_changed', createMarkerBu
编辑:我的问题实际上与此重复: google maps v3: center of bounds is different from center of the map 我尝试提取谷歌地图边界的中心点
我从 geoJson 中提取了一个要素图层,然后同步了一个表格。当我放大每个功能时,我试图做到这一点,它将表格过滤到这些功能。以下是我的脚本不起作用。我在 'if (map.getBounds().c
我有一个带有 JPanel 的简单应用程序和一个计时器,用于打印每一帧面板的大小和位置。 import java.awt.Point; import java.awt.Rectangle; impor
我正在尝试获取动态添加到 map 的标记的边界。我的目标是动态地将标记添加到 map 中,并使 View 自动缩放以适合 map 上所有标记的边界。以下是我当前的代码以及我迄今为止尝试过的内容: 起点
我有这段javascript代码 var myOptions = { zoom:9, mapTypeId: google.maps.MapTypeId.ROAD
photo = (ImageView) findViewById(R.id.image1); photo.setImageBitmap(pic); Drawable draw
我在这里关注答案:How get a string width in Libgdx? 我遇到的问题是 getBounds 似乎没有返回正确的宽度。我下面的代码应该在字符串末尾放置点,但是您可以看到一些
var map; function initialize(location) { var currentPosition = new google.maps.LatLng(14.457264, 121
我试过map.fitBounds(geojsonFeature.getBounds());我得到这个错误: geojsonFeature.getBounds() is not a function.
下面是我的代码。我已添加 google.maps.event.addListenerOnce 但仍然收到此错误。不知道如何解决。谢谢。 “未捕获类型错误:无法读取未定义的属性“getBounds””
我是Flash和ActionScript的新手,但管理起来很好。阻碍我前进的一件事是width的height和DisplayObject(Container)属性。我终于开始了解他们,并了解到Spri
我有一个从 JFrame 扩展的类。在其构造函数中,我生成一个 JPanel: JPanel contentPane = new JPanel(); contentPane.setBa
我希望检测到标记并显示分配给矩形的值。通过研究,我发现this , 但它不适用于我的情况,因为我只需要一个 latlong 点。我找到了与我想要的类似的东西并尝试了一下,它是 here 但它似乎对我的
而不是整个窗口都带有关闭、最大化和最小化按钮以及边框? 我正在尝试保存客户区的屏幕截图...maximizedBounds 使应用程序崩溃... 最佳答案 改为获取内容 Pane 的边界(即 JFra
我有: const map = L.map("mapid", {preferCanvas: true}); //.... const circle = L.circle([47.6652642,
EDIT2:似乎创建大数字是因为动画片段不包含任何 bipmap 数据,但我还不确定,但我真正的错误是我只是忘记了一个“getBounds”前面的“this”...项目规模太大,我找不到错误 =) 编
我想以 4 个 float 的列表形式获取 map 边界的坐标(即纬度/经度坐标中的两个点)。 这个(Google map 未记录的功能)直到几天前还可以工作: var b = map.getBoun
我正在尝试使用 STArray 编写 Fisher-Yates 洗牌算法。与我在网上找到的所有其他示例不同,我试图避免使用 native 列表。我只想就地洗牌数组。 这就是我所拥有的: randShu
我是一名优秀的程序员,十分优秀!