标签: purescript

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类型类时遇到了麻烦.我必须在前面说,我不是Haskell专家,所以如果这些是明显的错误我会道歉.

我已经尝试了几种不同的方法,并为每个方法打了一堵墙.我基本上试图为show图中的边定义函数.一种方法如下:

module Foo where

data Edge n = Edge { from :: n, to :: n }

instance showEdge :: (Show n) => Show (Edge n) where
  show e = "Edge from "++(show e.from)++" to "++(show e.to)

e = Edge { from: 1, to: 2 }

main = show e
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

$ psc src/Attempt1.purs
Error at src/Attempt1.purs line 6, column 27:
Error in declaration showEdge
Cannot unify Prim.Object with Foo.Edge.
Run Code Online (Sandbox Code Playgroud)

我猜这与它推断e出定义中的类型这一事实有关show.我在这里尝试添加类型注释,但是我收到了语法错误:

module Foo …
Run Code Online (Sandbox Code Playgroud)

purescript

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

什么是处理(深层嵌套)仿函数的正确方法?

我有以下简单的代码

import Data.String.Regex
import Data.Array

last <$> match someRegex "   1"
Run Code Online (Sandbox Code Playgroud)

哪里

match someRegex "   1"
Run Code Online (Sandbox Code Playgroud)

返回类似的东西

Just ([Just ("   1"),Just ("   "),Just ("1")])
Run Code Online (Sandbox Code Playgroud)

last <$> match someRegex "   1"
Run Code Online (Sandbox Code Playgroud)

返回类似的东西

Just (Just (Just ("   1"))) 
Run Code Online (Sandbox Code Playgroud)

现在我有一个深深嵌套的Maybe.这使得它很难处理(甚至使用仿函数).我给自己写了一对辅助函数 - 但我对此并不满意.它不知何故感觉不对.

extract j = do
    case j of
        Nothing -> Nothing
        Just a -> a
extract2 jj = extract $ extract jj
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

extract2 $ last <$> match someRegex "   1"
Run Code Online (Sandbox Code Playgroud)

在Purescript/Haskell中有没有更好/惯用的方法来做这些事情?

haskell functor purescript

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

如何组成purescript-halogen应用

我想用Purescript的Halogen编写我的前端的特定组件.

例如,我想使用Halogen创建一个注册表.它看起来如下所示:

module RegistrationForm where

import Prelude

...

-- | The state of the application
newtype State = State { email :: String, password :: String }

derive instance genericState :: Generic State
instance showState :: Show State where show = gShow
instance eqState :: Eq State where eq = gEq

initialState :: State
initialState = State { email: "", password: "" }

-- | Inputs to the state machine
data Input a = FormSubmit a
             | UpdateEmail String a …
Run Code Online (Sandbox Code Playgroud)

purescript halogen

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

从Purescript Record转换为JS对象

我正在尝试将Record转换为vanilla JS对象

module MyModule where

data Author = Author { name :: String, interests :: Array String }

phil :: Author
phil = Author { name: "Phil", interests: ["Functional Programming", "JavaScript"] }
Run Code Online (Sandbox Code Playgroud)

当我从JS访问对象时

MyModule.phil
Run Code Online (Sandbox Code Playgroud)

它包含我不感兴趣的其他属性(value0)

{"value0":{"name":"Phil","interests":["Functional Programming","JavaScript"]}}
Run Code Online (Sandbox Code Playgroud)

你如何将Purescript世界的记录编组到JS?

javascript purescript

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

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
查看次数

从功能上思考.在Haskell/Purescript中构建一个新数组

我是函数式编程的新手,我决定在Purescript中构建一个应用程序.我遇到了第一个障碍,我不确定如何从概念上思考这个问题.

我不是在寻找代码,而是在功能上思考这个问题.

我有一个数据列表.具体来说,就像

[ {a :: String, b :: String, c :: String} ]
Run Code Online (Sandbox Code Playgroud)

我想通过使用提供的记录(以及上面类型的列表)创建Html(这是一种purescript-halogen类型)的列表.

所以,我会有一个功能

buildElements :: forall p i. MyRecordObject -> Array (HTML p i)
Run Code Online (Sandbox Code Playgroud)

现在,我想我需要给这个函数结果类型一个Monad计算上下文(purescript Eff就像Haskell IO)

所以类似于:

buildElements :: forall p i. MyRecordObject -> Eff (Array (HTML p i))
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是模糊地创建一个类似的列表

take $ length xs $ repeat ARecordObject
Run Code Online (Sandbox Code Playgroud)

然后将记录映射到该列表,但我不确定如何将其转换为代码.无论如何,这似乎是错误的,因为我的计划涉及改变状态ARecordObject,这是一个禁忌.

那么我发现了这个功能:

forEach :: forall e a. Array a -> (a -> Eff e Unit) -> Eff Unit
Run Code Online (Sandbox Code Playgroud)

看起来几乎完美!我得到一个数组,我给它一个函数,以某种方式将记录中的属性分配给这个新数组......但不,等等......我正在考虑非功能性.

我真的在这里有点亏.基本上,我想创建类似于<li></li> …

haskell functional-programming purescript

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

获取purescript中的当前时间/日期

这在我看来,一个奇怪的问题,但我已经通过了purescript-datetime,并purescript-js-date和我不能找到一个办法让电流DateTime.是否有一些隐藏的库函数或者我必须通过FFI?

purescript

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

如何配置使用从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
查看次数

行为是一个Comonad?

Conal Elliott在这里谈论Streams和Comonads:http://conal.net/blog/posts/sequences-streams-and-segments

但是,他没有直接提到行为.所以......是行为的共同体,如果是这样的话 - 这实际意味着什么呢?

对于初学者 - 我认为行为可以提供extendextract功能.我看到它工作的唯一方法是它是否在特定时刻对值进行采样.

这是Comonad对行为意味着什么?它允许一个人"分叉并冻结"一个行为?

换句话说 - 如果我们有一个行为随着时间的推移具有这些值:A,B,C,D,...我们可以extend在它的时间B,并获得一个B无限期包含的新行为(这是有用的 - 因为我们可以当时liftmap它等)

haskell frp category-theory purescript

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