# Indexer property only accepts tuple without parens. Anybody know why?

**URL:** https://forums.fsharp.org/t/indexer-property-only-accepts-tuple-without-parens-anybody-know-why/291
**Category:** General
**Created:** [June 14, 2018, 1:09pm UTC](https://forums.fsharp.org/t/indexer-property-only-accepts-tuple-without-parens-anybody-know-why/291 "2018-06-14T13:09:47Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![Nelkins](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/nelkins/32/173_2.png) [@Nelkins](https://forums.fsharp.org/u/Nelkins)
#### Post date: [June 14, 2018, 1:09pm UTC](https://forums.fsharp.org/t/indexer-property-only-accepts-tuple-without-parens-anybody-know-why/291/1 "2018-06-14T13:09:47Z")

</div>

Example here:

 ![indexer_fsharp_error](https://canada1.discourse-cdn.com/flex030/uploads/fsharp/original/1X/55c18269115e33b07c2860ac25f670f7e894374c.gif)

Signature of the property says it accepts a tuple. When I use parens or a tuple bound to a name, it doesn’t work. Is there a reason for this?

---

<div class="post-metadata">

### Author: ![Tarmil](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/tarmil/32/259_2.png) [@Tarmil](https://forums.fsharp.org/u/Tarmil)
#### Post date: [June 22, 2018, 12:43pm UTC](https://forums.fsharp.org/t/indexer-property-only-accepts-tuple-without-parens-anybody-know-why/291/2 "2018-06-22T12:43:21Z")

</div>

That’s because it doesn’t take a tuple: it takes several indices. You’re not actually creating a tuple when you call `pixels.[9,0]`. This is similar to method arguments actually: when you do eg `File.WriteAllText("foo.txt", "Hello!")`, you’re passing two separate arguments to the method, not one tuple.

---

<div class="post-metadata">

### Author: ![btran](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/btran/32/250_2.png) [@btran](https://forums.fsharp.org/u/btran)
#### Post date: [July 4, 2018, 3:44pm UTC](https://forums.fsharp.org/t/indexer-property-only-accepts-tuple-without-parens-anybody-know-why/291/3 "2018-07-04T15:44:03Z")

</div>

That last is not technically correct, Tarmil. You can try it yourself by first creating those parameters as a tuple, and then use the tuple as argument to File.WriteAllText. You will find that it works.

It is a common misunderstanding that functions and methods accept either curried parameters or tupled parameters, but that is only a matter of convention. So called tupled parameters only means that the method or function accepts one tuple. You can have as many curried and tupled as you wish, mixed in any manner. However, this picture breaks to a large extent when optional parameters and references are involved.

---

<div class="post-metadata">

### Author: ![btran](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/btran/32/250_2.png) [@btran](https://forums.fsharp.org/u/btran)
#### Post date: [July 4, 2018, 4:05pm UTC](https://forums.fsharp.org/t/indexer-property-only-accepts-tuple-without-parens-anybody-know-why/291/4 "2018-07-04T16:05:49Z")

</div>

Since there are overloads, it’s a bit tricky in this case to make the compiler understand. This is how it can be done.

> ```
> let args = (@"foo.txt", "Hello!")
> let dummy = args |> File.WriteAllText
> 
> ```

---

<div class="post-metadata">

### Author: ![btran](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/btran/32/250_2.png) [@btran](https://forums.fsharp.org/u/btran)
#### Post date: [October 29, 2025, 2:48pm UTC](https://forums.fsharp.org/t/indexer-property-only-accepts-tuple-without-parens-anybody-know-why/291/5 "2025-10-29T14:48:53Z")

</div>

My knowledge of how this works has expanded slightly since my last post. If a method is overloaded, then it can’t be curried. It also can’t take a tuple as shown in my previous post. It can only take an argument list. This means that whether an argument list with two or more value arguments is a tuple or not, depends on whether the method is overloaded or not.

---

<div class="post-metadata">

### Author: ![altbodhi](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/altbodhi/32/1253_2.png) [@altbodhi](https://forums.fsharp.org/u/altbodhi)
#### Post date: [November 1, 2025, 2:36am UTC](https://forums.fsharp.org/t/indexer-property-only-accepts-tuple-without-parens-anybody-know-why/291/6 "2025-11-01T02:36:43Z")

</div>

Indexer is operator. Not a property.

I think special syntax for many cases only confuse developers. I want to use only functions such as Item. This is very easy for use. Functions, functions and once again functions. They’re everywhere ))
