标签: purescript

定义 ADT 的显示实例

我尝试为 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

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

如何在Purescript中的记录数组中查找元素

每个人。我想在 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

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

如何部分更新纯脚本记录

每个人!

我是 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 中实现这一点?谢谢你。

record purescript

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

FFI 中带有 Aff 回调的函数

我正在尝试包装一个 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 端执行它。

javascript asynchronous ffi purescript

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

PureScript 等价于 Haskell 的 >> 运算符

是否有与 Haskell>>运算符等效的 PureScript 标准库?

class Monad m where
...
(>>) :: m a -> m b -> m b
...
Run Code Online (Sandbox Code Playgroud)

显然,定义很简单,但如果有的话,我更愿意使用库版本。

monads standard-library purescript

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

如何使用 Spago 安装特定的软件包版本?

使用类似npm我们可以安装特定版本的工具

npm install foo@1.2.0 
Run Code Online (Sandbox Code Playgroud)

您如何使用 安装特定版本spago install?

purescript spago

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

purescript 中的应用函子和记录

在 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 中不起作用。有没有办法实现相同的结果,即保留记录语法,同时在构建实例时允许通过应用函子部分应用?

谢谢!

haskell purescript

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

ReaderT 的 Ask 未正确推导 Monad 类型

我正在尝试用纯脚本中的 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)

haskell functional-programming purescript

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

试图在Purescript中使用Cons函数

继承我的代码:

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

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

为什么PureScript中的实例有名称?

我现在正在使用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中的类型类实例有名称呢?

typeclass purescript

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