# 前言

时间回到2011年初，我做了一些泛型编程(generic programming）的实验，最后这些实验形成了shapeless，我绝不会想到五年后它居然会成为一个被如此广泛使用的类库。非常感谢那些信任我并将shapeless用到项目中的人，这种信任对任何开源项目来说都是巨大的动力。同样感谢多年来对项目做出巨大贡献的人，截止写此书时共有81人，如果没有他们的帮助shapeless就不会这么有趣和有用了。

尽管有这些积极因素，shapeless也经历了所有开源项目的通病：缺乏完善的、准确的、易懂的文档。尽管我知晓这一点，但还是没能抽出时间在这方面做些事情，责任全在我。Travis Brown在Stack Overflow的英勇的表现以及很多人的讨论和实践，从一定程度上弥补了这一缺陷（此处我要特别指出Sam Halliday的“Shapeless for Mortals”）。

但是Dave Gurnell改变了这一切，他为我们写了这本精彩的书，此书介绍了shapeless的最重要的应用：通过泛型编程实现类型类（type class）派生。为了写此书他搜集了大量的代码和文档，征求了我的意见，并从一堆杂乱无章的文档和叙述中抽丝剥茧，使之变的清晰、简明、实用。幸运的是他也很好的实现了我的一贯主张——shapeless是一个非常简单的类库，它体现了一系列简单的原则。 感谢Dave，你为我们做了一件伟大的事情。

Miles Sabin

shapeless的作者


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dreamylost.gitbook.io/dreamylost/shapeless-guide/chapter-0.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
