我尝试为 ADT 定义一个 show 实例,但收到错误Argument list lengths differ in declaration show。我怎样才能在不使用的情况下完成这项工作Generic?
data Route = Home | Users String | User Int | NotFound String
instance showRoute :: Show Route where
show Home = "Home"
show Users str = "Users"
show User i = "User"
show NotFound str = "404"
Run Code Online (Sandbox Code Playgroud) 每个人。我想在 Purescript 的记录数组中找到一个元素,但由于我不熟悉 Purescripot,因此无法解决。
我有一个数组 banks包含银行记录。
这是银行记录的类型。
type Bank = {
id :: Int,
name :: String
}
Run Code Online (Sandbox Code Playgroud)
我想开银行 banks其 ID 与给定的搜索 ID 相同。
我试过如下:
find (_.id == searchId) banks
Run Code Online (Sandbox Code Playgroud)
但得到这个错误。
Could not match type
Int
with type
Function
{ id :: t0
| t1
}
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个简单的问题。
每个人!
我是 Purescript 初学者,在处理记录时遇到问题。
我有一种记录类型:
type Employee =
{ firstName :: String
, lastName :: String
, address :: String
, height :: Number
, weight :: Number
...
}
Run Code Online (Sandbox Code Playgroud)
我只想更新此记录的一部分。假设我只想像下面的打字稿代码那样更新高度。
let a: Employee = {
...a,
height: 180
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在 Purescript 中实现这一点?谢谢你。
我正在尝试包装一个 Javascript 库,其中我有一个A.bar(f)以 function 作为参数的方法f : B -> void。
由于我想用来bar执行一些异步计算,因此在 Purescript 方面,我有一个函数声明
foreign import foo :: Fn2 A (B -> Aff Unit) -> EffectFnAff Unit
Run Code Online (Sandbox Code Playgroud)
在其相应的 Javascript 文件中,我有类似的内容
exports.foo = function (a, f) {
return function (onError, onSuccess) {
a.bar(function (b) {
f(b)
})
return function (cancelError, cancelerError, cancelerSuccess) {
cancelerSuccess()
}
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是这f(b)是一个Aff对象,我不知道如何在 Javascript 端执行它。
是否有与 Haskell>>运算符等效的 PureScript 标准库?
class Monad m where
...
(>>) :: m a -> m b -> m b
...
Run Code Online (Sandbox Code Playgroud)
显然,定义很简单,但如果有的话,我更愿意使用库版本。
使用类似npm我们可以安装特定版本的工具
npm install foo@1.2.0
Run Code Online (Sandbox Code Playgroud)
您如何使用 安装特定版本spago install?
在 Haskell 中,我习惯于做这样的事情。
data Foo = Foo { foo :: String, bar :: String }
mFoo :: (Monad m) => m String -> m String -> m Foo
mFoo foo bar = Foo <$> foo <*> bar
Run Code Online (Sandbox Code Playgroud)
但是,这在 purescript 中不起作用。有没有办法实现相同的结果,即保留记录语法,同时在构建实例时允许通过应用函子部分应用?
谢谢!
我正在尝试用纯脚本中的 ReaderT 编写代码。但我的编译器没有正确推断类型
type Doc' = ReaderT Level (Writer (Array String)) String
line' :: String -> Doc'
line' input = do
space <- ask -- error line
lift $ tell $ [(power " " space) <> input <> "\n"]
Run Code Online (Sandbox Code Playgroud)
抛出的错误是
Could not match type
Unit
with type
String
while trying to match type t0 t1
with type ReaderT @Type Int (WriterT (Array String) Identity) String
while checking that expression (bind ask) (\space ->
(apply lift) ((...) [ ...
]
) …Run Code Online (Sandbox Code Playgroud) 继承我的代码:
print 1: [2,3]
Run Code Online (Sandbox Code Playgroud)
当我跑它时,我得到了
Cannot unify type
Data.List.List
with type
Prim.Array
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
我现在正在使用PureScript进行项目并遇到实例(我是新手,我正在学习).基本上我必须创建一个实例,以便使具有不同类型的函数重载.
public String toStr(Integer i) {
return String.valueOf(i);
}
public String toStr(Float i) {
return String.valueOf(i);
}
Run Code Online (Sandbox Code Playgroud)
(我知道,这很奇怪,只是举个例子).据我所知,这可以使用类型类编写.
foreign import unsafeToStr :: forall a. a -> String
class ToStr a where
toStr :: a -> String
instance intToStr :: ToStr Int where
toStr a = unsafeToStr a
instance numToStr :: ToStr Number where
toStr a = unsafeToStr a
Run Code Online (Sandbox Code Playgroud)
这是我们如何做到.据我所知,没有必要为实例命名,因为编译器会自动识别它.我甚至出于好奇来测试它,它适用于我给它的任何名字.
那么为什么PureScript中的类型类实例有名称呢?
purescript ×10
haskell ×2
asynchronous ×1
ffi ×1
javascript ×1
monads ×1
record ×1
spago ×1
typeclass ×1