标签: purescript

purescript中的Eff-monad是否受到www.eff-lang.org的启发?

阅读有关Eff语言的内容,我想知道是否有类似的想法已经在使用中.Eff-Language提到了一篇名为"推断代数效应"的论文,该论文描述了Eff用于推断效果的算法.有相似之处吗?

functional-programming purescript

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

如何更新用`data`而不是`type`定义的PureScript记录?

更新使用type作品定义的记录,如与Haskell的差异中所述

type PointRec = { x :: Number, y :: Number }

setX :: Number -> PointRec -> PointRec 
setX val point = point { x = val }
Run Code Online (Sandbox Code Playgroud)

但是当使用data(并因此指定构造函数)定义时,它不会:

data PointRec = PointRec { x :: Number, y :: Number }

setX :: Number -> PointRec -> PointRec 
setX val point = point { x = val }
Run Code Online (Sandbox Code Playgroud)

我从编译器得到的错误是

Could not match type
Run Code Online (Sandbox Code Playgroud)

和一些细节.

我能在这做什么?

purescript

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

PureScript是否支持像C/Java等"格式化字符串"?

我需要输出一个带前导零和六位数的数字.在C或Java中,我将使用"%06d"格式字符串来执行此操作.PureScript是否支持格式字符串?或者我将如何实现这一目标?

purescript

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

Eff monad要求使用Debug.Trace.Trace行

我正在将History.js中的绑定写入PureScript,并且仍在努力理解Eff monad,一系列效果是什么以及为什么它们很有价值.现在我写了以下内容EasyFFI

type Title        = String
type Url          = String
type State        = forall a. {title :: Title, url :: Url | a}
type Data         = forall a. { | a}
type StateUpdater = Data -> Title -> Url -> Unit

-- this function is a work around for 'data' as a reserved word.
foreign import getData 
  "function getData(state){ return state['data']; }" 
  :: forall a b. { | a} -> b

unwrapState :: StateUpdater -> State -> Unit
unwrapState …
Run Code Online (Sandbox Code Playgroud)

functional-programming purescript

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

在purescript中>> =意味着什么?

我正在读purescript维基,发现下面的章节这也解释了do在以下方面>>=.

什么>>=意思?

记谱法

do关键字为monadic表达式引入了简单的语法糖.

这是一个例子,使用monad作为Maybe类型:

 maybeSum :: Maybe Number -> Maybe Number -> Maybe Number 
 maybeSum a b = do   
     n <- a
     m <- b   
     let result = n + m   
     return result 
Run Code Online (Sandbox Code Playgroud)

maybeSum取两个值类型Maybe Number,如果两个数字都不是,则返回它们的总和 Nothing.

使用do表示法时,返回类型必须有Monad类型的相应实例.声明可以采用以下形式:

  • a <- x 不好意思 x >>= \a -> ...
  • xx >>= \_ -> ...如果这是最后一个陈述,那就是去掉或者只是x.
  • 一个让绑定let a = x.注意缺少in关键字.

例子maybeSum desugars to …

purescript

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

Force在PureScript中显示记录

是否可以在PureScript中强制显示(即创建字符串表示形式)任意记录以进行调试,而不管它是否具有类型类实例Show

我想显示Pux事件对象的内容,但它没有Show实例:

  No type class instance was found for

    Data.Show.Show { target :: { value :: String
                               , checked :: Boolean
                               }
                   , currentTarget :: { value :: String
                                      , checked :: Boolean
                                      }
                   , altKey :: Boolean
                   , button :: Number
                   , buttons :: Number
                   , clientX :: Number
                   , clientY :: Number
                   , ctrlKey :: Boolean
                   , metaKey :: Boolean
                   , pageX :: Number
                   , pageY :: Number
                   , screenX :: Number
                   , screenY …
Run Code Online (Sandbox Code Playgroud)

debugging inspect purescript

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

PureScript是否有管道操作员?

来自F#世界,我习惯使用|>管道数据到函数:

[1..10] |> List.filter (fun n -> n % 2 = 0) |> List.map (fun n -> n * n);
Run Code Online (Sandbox Code Playgroud)

我假设受Haskell启发的PureScript有类似的东西.

如何在PureScript中使用管道运算符?

purescript

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

如何在 PureScript 中通过效果包装 QuickCheck 值?

我有一个shuffle功能Array

shuffle:: forall e. Array -> Eff (random :: RANDOM | e) Array
Run Code Online (Sandbox Code Playgroud)

它将 monad 中的数组打乱Control.Monad.Eff.Random并返回包装后的数组。我想测试数组是否被打乱,想比较结果是否不同,所以我编写了 QuickCheck 代码,如下所示:

quickCheck \arr -> isShuffled (shuffle arr)
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何编写isShuffled以匹配类型定义。自从:

  1. 没有像fromJustin那样的解包函数Maybe,因此它必须接受Random Array并返回Random Boolean,而我将检查代码放在 Monadic 表达式中。

  2. 因此,结果isShuffled不会很简单Boolean,而是像m Boolean

  3. forTestable中没有合适的,所以我可能需要为其创建一个实例,而 QuickCheck 中的注释提到:purescript-quickcheckm Boolean

    A testable property is a function of zero or more Arbitrary arguments, returning a Boolean or Result.代码 …

quickcheck purescript

5
推荐指数
0
解决办法
159
查看次数

如何配置使用从PureScript编译的JavaScript模块的TypeScript项目?

TL; DR我想为已编译的PureScript模块创建TypeScript类型,并将其分布在我的npm包中。我很乐于手动维护这些类型,只是无法弄清楚需要在tsconfig.json(上下)和package.json中放入什么。


我有一个项目,其中的核心功能是使用TypeScript CLI在PureScript中实现的,所有这些最终都通过npm以JavaScript的形式分发。我用一个简单的布局创建了一个类似的项目

.
??? cli                   # TypeScript CLI project
?   ??? main.ts
?   ??? tsconfig.json
?
??? output                # Compiled PureScript modules
?   ??? People
?       ??? externs.json
?       ??? index.js
?
??? src                   # PureScript source
?   ??? People.purs
?
??? types                 # TypeScript types for PureScript modules
    ??? People.d.ts
Run Code Online (Sandbox Code Playgroud)

src/People.purs我定义的核心功能:

module People where

type Person = { name :: String }

david :: Person
david = { name: "David …
Run Code Online (Sandbox Code Playgroud)

node.js npm typescript purescript

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

Purescript:为什么 genericEncodeJSON 不能对容器内的类型进行编码?

我不明白为什么下面的程序无法编译。

module Main where

import Prelude
import Effect (Effect)
import Effect.Console (log)
import Data.Generic.Rep (class Generic)
import Foreign.Generic (defaultOptions, genericEncodeJSON)

main :: Effect Unit
main = do
  log "Hello sailor!"

newtype Foo = Foo {
    x :: Int
  , y :: Int
  , z :: Array Bar
}

type Bar = {
    a :: String
  , b :: String
}

derive instance repGenericFoo:: Generic Foo _

fooToJSON :: Foo -> String
fooToJSON = genericEncodeJSON $ defaultOptions { unwrapSingleConstructors = true …
Run Code Online (Sandbox Code Playgroud)

purescript

5
推荐指数
0
解决办法
207
查看次数