标签: bucklescript

如何将此JSON解析为记录类型?

我有一些我将在运行时获取的数据:

/* {id: 1, name: 'brad', age: 27, address: { city: 'city1', state: 'state1' } } */
let data = "{\"id\":1,\"name\":\"brad\",\"age\":27,\"address\":{\"city\":\"city1\",\"state\":\"state1\"}}";
Run Code Online (Sandbox Code Playgroud)

使用ReasonML和BuckleScript,我如何才能在表单中获取此数据:

type address = {
  city: string,
  state: string
};

type person = {
  id: int,
  name: string,
  age: option int,
  address: option address
};
Run Code Online (Sandbox Code Playgroud)

我提出的解决方案是100多行.

json reason bucklescript

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

是否可以不在BuckleScript中导出模块?

是否有可能不导出某些不应由包消费者直接使用的内部模块?

ocaml module reason bucklescript

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

循环依赖原因ml

假设我有一个1 -> n关系:一个待办事项可以有很多(或零)个笔记,而一个笔记可以有零个或一个待办事项。我怎样才能在 ReasonML 中实现这种关系?(绑定外部库)

这是我目前所带来的(这当然不起作用)

module Note = {
  module Attributes = {
    [@bs.deriving abstract]
    type t = {
      [@bs.optional]
      id: float,
      [@bs.optional]
      text: string,
      [@bs.optional]
      todo: Todo.Attributes.t,
    };
  };
};

module Todo = {
  [@bs.deriving abstract]
  type t = {
    [@bs.optional]
    id: float,
    [@bs.optional]
    title: string,
    [@bs.optional]
    completed: bool,
    [@bs.optional]
    notes: array(Note.Attributes.t),
  };
};

let todo = Todo.Attribute.t(~title="hello");
Run Code Online (Sandbox Code Playgroud)

如果 Note 和 Todo 在一个文件中,并且在单独的文件中怎么办?

ocaml reason bucklescript

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

为什么需要调用resolve()?

我正在为Javascript开发人员查看 Reason的第一个原因反应应用程序的示例

我看到他Js.Promise.resolve在使用时正在打电话bs-fetch:

RepoData.fetchRepos()
  |> Js.Promise.then_(repoData => {
       handleReposLoaded(repoData);
       Js.Promise.resolve();
     })
  |> ignore;
Run Code Online (Sandbox Code Playgroud)

我在BuckleScript代码中也看到了类似的代码.例如在Bucklescript Cookbook中:

Js.Promise.(
  Fetch.fetch "https://api.github.com/users/reasonml-community/repos"
  |> then_ Fetch.Response.text
  |> then_ (fun text -> 
      text 
      |> names
      |> Array.iter Js.log 
      |> resolve)
  |> ignore
Run Code Online (Sandbox Code Playgroud)

在JS中,我们通常resolve在创建新promise时调用,而不是在使用返回promise的函数时调用.那么为什么我们需要打电话给resolve上面的案例呢?

promise reason bucklescript

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

如何查询变量的类型类?

我正在尝试学习 ReasonML,并且我正在做一些公案来帮助我完成这项任务。我尝试编写的公案之一是在将列表转换为数组后询问列表的类型。我知道在某些语言中存在诸如 Haskell ( :t) 之类的运算符,我们可以在其中询问变量的类型。是否有任何相当于:tReasonML 的东西?或者检查是否Array.of_list返回数组是没有意义的,因为编译器确保......

ocaml reason bucklescript

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

如何为Js.Dict.get使用Js.Dict.t类型

我试图将一些JS转换为Reason,沿着我需要键入JSON响应的方式,并检查对象中是否存在键.

这是我目前的代码:

let api_key = "";
let api_url = "http://ws.audioscrobbler.com/2.0";
let method = "user.getRecentTracks";
let user = "montogeek";

type trackAttr = {
  nowplaying: bool
};

type artistT = {
  text: string
}

type trackT = {
  attr: trackAttr,
  name: string,
  artist: artistT
};

type recentTrackT = {
  track: array(Js.Dict.t(trackT))
};

type response = {
  recenttracks: recentTrackT
};

Js.Promise.(Fetch.fetch(api_url ++ "?method=" ++ method ++ "&" ++ user ++ "=" ++ user ++ "&limit=1&format=json&api_key=" ++ api_key)
    |> then_(Fetch.Response.json)
    |> then_(json: response => …
Run Code Online (Sandbox Code Playgroud)

types reason bucklescript

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

如何使用ReasonReact显示表情符号?

有没有一种简单的方法可以使用ReasonReact插入表情符号?

在ReactJS中,您可以简单地输入表情符号并按预期方式呈现,但是在Reason中似乎并非如此。

如果您尝试这样做:

<span role="img" ariaHidden=true> {React.string("")} </span>
Run Code Online (Sandbox Code Playgroud)

它编译为:

React.createElement("span", {
                  "aria-hidden": true,
                  role: "img"
                }, "\xf0\x9f\x92\xa9")
Run Code Online (Sandbox Code Playgroud)

呈现为:

ð©

编码表情符号的最佳方法是什么,以便ReasonReact可以按预期显示它们?

这个问题的答案说明了如何插入unicode,但是我对如何直接键入字符而无需查找每个unicode感兴趣。

unicode reason bucklescript reason-react

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

以下警告是什么意思?

以下警告是什么意思,如何解决原因?

Warning: Unimplemented primitive used:removeEventListener 
Run Code Online (Sandbox Code Playgroud)

[@bs.val]
external addEventListener: (string, unit => unit) => unit = "addEventListener";
external removeEventListener: (string, unit => unit) => unit =
  "removeEventListener";

...

React.useEffect(() => {
  let handler = () => dispatch(ToggleMenu(false));
  addEventListener("popstate", handler);
  Some(() => removeEventListener("popstate", handler));
});
Run Code Online (Sandbox Code Playgroud)

ffi reason bucklescript

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

将JSON字段转换为ReasonML变体

我有一个JSON结构,其中包含period可以是对象或字符串的字段。我已经在代码中准备好了变体,并且可以正常工作:

type period = {
  start: string,
  end_: string,
};

type periodVariant =
  | String(string)
  | Period(period);
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试将输入JSON转换为变量类型时:我只是不知道该怎么做。这是我的尝试:

let periodVariantDecode = (json: Js.Json.t): periodVariant => {
  switch(json) {
  | String(string) => String(Json.Decode.string(string))
  | period => Period(Json.Decode.{
      start: period |> field("start", string),
      end_: period |> field("end", string),
    })
  };
};
Run Code Online (Sandbox Code Playgroud)

现在,当然是因为我想匹配的东西,是类型还是不行的Js.Json.t对抗String这是我的一部分periodVariant,但我不知道该如何实现我想要的。

json reason bucklescript bs-json

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

reasonml记录与JS对象

假设我定义了以下类型:

type queueParams = {
  durable: bool
};

class type amqpChannelT = [@bs] {
  pub assertQueue: string => queueParams => Js.Promise.t(unit);
};
Run Code Online (Sandbox Code Playgroud)

然后调用以下内容:

channel##assertQueue("exampleQueue", {"durable": bool});
Run Code Online (Sandbox Code Playgroud)

结果是:

This has type:
    {. "durable": bool}
  But somewhere wanted:
    queueParams (defined as
Run Code Online (Sandbox Code Playgroud)

我怎样才能传递正确的东西?为什么我传递的东西不是记录?点符号的含义是什么?

ocaml record reason bucklescript

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

标签 统计

bucklescript ×10

reason ×10

ocaml ×4

json ×2

bs-json ×1

ffi ×1

module ×1

promise ×1

reason-react ×1

record ×1

types ×1

unicode ×1