async () => {
    const adapterAsync = new FileAsync<DbSchema>("test.json");
    const dbAsyncPromise = lowfp(adapterAsync);
    const dbAsync = await dbAsyncPromise;
    const postsWithDefault = dbAsync("posts", [{ title: "baz" }] as Post[]);

    const func: Promise<Post[]> = postsWithDefault.write(post => [
      ...post,
      { title: "another" }
    ]);
  };
() => {
  const adapterLS = new LocalStorage<DbSchema>("test.json");
  const dbFP = lowfp(adapterLS);
  // Get posts
  const postsFP: low.FpReturn<Post[], low.AdapterSync<DbSchema>> = dbFP(
    "posts"
  );

  // replace posts with a new array resulting from concat
  // and persist database
  const write: Post[] = postsFP.write(
    concat({ title: "lowdb is awesome", views: random(0, 5) })
  );

  // Find post by id
  const post: Post = postsFP(find({ id: 1 }));

  // Find top 5 fives posts
  const popular: Post[] = postsFP([
    sortBy("views") as PostsAction,
    take(5) as PostsAction
  ]);

  const filtered: Post[] = dbFP("posts")(filter({ published: true }));
  const writeAction: Post[] = dbFP("posts").write(concat({ id: "123" }));
  const writeAction2: string = dbFP(["user", "name"]).write(set("typicode"));

  async () => {
    const adapterAsync = new FileAsync<DbSchema>("test.json");
    const dbAsyncPromise = lowfp(adapterAsync);
    const dbAsync = await dbAsyncPromise;
    const postsWithDefault: low.FpReturn<
      Post[],
      low.AdapterAsync<DbSchema>
    > = dbAsync("posts", [{ title: "baz" }] as Post[]);

    const func: Promise<Post[]> = postsWithDefault.write(post => [
      ...post,
      { title: "another" }
    ]);
  };

  type PostsAction = (posts: Post[]) => Post[];
};