# Why do I need to repeat type declarations between interfaces and implementations (or how do I get around this)?

**URL:** <https://discuss.ocaml.org/t/why-do-i-need-to-repeat-type-declarations-between-interfaces-and-implementations-or-how-do-i-get-around-this/3350>\
**Category:** Learning\
**Created:** [February 16, 2019, 3:31am UTC](https://discuss.ocaml.org/t/why-do-i-need-to-repeat-type-declarations-between-interfaces-and-implementations-or-how-do-i-get-around-this/3350 "2019-02-16T03:31:53Z")\
**Posts on this page:** 1\
**Showing post:** 3

<div class="post-metadata">

**Author:** ![jonathandoyle](https://avatars.discourse-cdn.com/v4/letter/j/a3d4f5/32.png) [@jonathandoyle](https://discuss.ocaml.org/u/jonathandoyle)\
**Post date:** [February 16, 2019, 2:53pm UTC](https://discuss.ocaml.org/t/why-do-i-need-to-repeat-type-declarations-between-interfaces-and-implementations-or-how-do-i-get-around-this/3350/3 "2019-02-16T14:53:38Z")

</div>

See also

> [@What is the reason of separation of module implementation and signatures in OCaml?](https://discuss.ocaml.org/t/what-is-the-reason-of-separation-of-module-implementation-and-signatures-in-ocaml/1735):
>
> What is the reason of the separation of module implementation and signatures? Wouldn’t it be better to describe signatures in function definitions? For example: let sum a:int b:int = a + b instead of: (\* \*.mli \*) val sum : int -\> int -\> int (\* \*.ml \*) let sum a b = a + b

---

_[View the full topic](https://discuss.ocaml.org/t/why-do-i-need-to-repeat-type-declarations-between-interfaces-and-implementations-or-how-do-i-get-around-this/3350)._
