<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ali Elshishini</title>
    <description>The latest articles on DEV Community by Ali Elshishini (@shishini).</description>
    <link>https://dev.to/shishini</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3326468%2F1574d87c-0df6-47cf-a123-a8c5b9bf5178.jpeg</url>
      <title>DEV Community: Ali Elshishini</title>
      <link>https://dev.to/shishini</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shishini"/>
    <language>en</language>
    <item>
      <title>Understanding Elixir's List.to_string</title>
      <dc:creator>Ali Elshishini</dc:creator>
      <pubDate>Wed, 04 Mar 2026 19:23:26 +0000</pubDate>
      <link>https://dev.to/shishini/understanding-elixirs-listtostring-1h0</link>
      <guid>https://dev.to/shishini/understanding-elixirs-listtostring-1h0</guid>
      <description>&lt;p&gt;So I came across this (quite old) post on stackoverflow, someone wanted to print a list next to a string and he was struggling with it&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://assets.dev.to/assets/stackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
          &lt;a href="https://stackoverflow.com/questions/45523766/elixir-printing-list-along-with-string" rel="noopener noreferrer"&gt;
            Elixir: Printing list along with string
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Aug  5 '17&lt;/span&gt;
            &lt;span&gt;Comments: 1&lt;/span&gt;
            &lt;span&gt;Answers: 2&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/45523766/elixir-printing-list-along-with-string" rel="noopener noreferrer"&gt;
        &lt;img src="https://assets.dev.to/assets/stackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          16
        &lt;/div&gt;
        &lt;img src="https://assets.dev.to/assets/stackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;I would like to print a list along with a string identifier like&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;list = [1, 2, 3]
IO.puts "list is ", list
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This does not work. I have tried few variations like &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# this prints only the list, not any strings
IO.inspect list
# using puts which also does&lt;/code&gt;&lt;/pre&gt;…
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://stackoverflow.com/questions/45523766/elixir-printing-list-along-with-string" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Question&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
and I was a bit baffled as of why this is an issue at all, just convert your list to a string and print it, this logic should work in any language in any print function, should be simple and straightforward  

&lt;p&gt;Elixir surely have a function that convert a lists to string, and it does &lt;code&gt;List.to_string&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But to my surprise &lt;code&gt;List.to_string&lt;/code&gt; was doing weird things&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iex(42)&amp;gt; [232, 137, 178] |&amp;gt; List.to_string
&amp;lt;&amp;lt;195, 168, 194, 137, 194, 178&amp;gt;&amp;gt;
iex(43)&amp;gt; [1, 2, 3] |&amp;gt; List.to_string
&amp;lt;&amp;lt;1, 2, 3&amp;gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That was not what I was expecting, I was expecting a returned value that is similar to what &lt;code&gt;IO.inspect&lt;/code&gt; produce &lt;/p&gt;

&lt;p&gt;So to verify my expectation, I checked what clojure does, because clojure to me is the epitome of sanity&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Clojure 1.12.4
user=&amp;gt; (str '(232 137 178))
"(232 137 178)"
user=&amp;gt; (str '(1 2 3))
"(1 2 3)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;it was more or less what &lt;code&gt;IO.inspect&lt;/code&gt; does&lt;br&gt;
it returns something that look like how lists "look like" as code&lt;/p&gt;

&lt;p&gt;So next step was more introspection&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iex(47)&amp;gt; [232, 137, 178] |&amp;gt; List.to_string |&amp;gt; i
Term
  &amp;lt;&amp;lt;195, 168, 194, 137, 194, 178&amp;gt;&amp;gt;
Data type
  BitString
Byte size
  6
Description
  This is a string: a UTF-8 encoded binary. It's printed with the `&amp;lt;&amp;lt;&amp;gt;&amp;gt;`
  syntax (as opposed to double quotes) because it contains non-printable
  UTF-8 encoded code points (the first non-printable code point being
  `&amp;lt;&amp;lt;194, 137&amp;gt;&amp;gt;`).
Reference modules
  String, :binary
Implemented protocols
  Collectable, IEx.Info, Inspect, JSON.Encoder, List.Chars, String.Chars
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;What the heck is BitString? &lt;/p&gt;

&lt;p&gt;So I kept fiddling with the function, until I finally got it&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iex(44)&amp;gt; ["o","m",["z","y"]] |&amp;gt; List.to_string
"omzy"
iex(45)&amp;gt; ["o","m",["z","y"]] |&amp;gt; IO.inspect
["o", "m", ["z", "y"]]
["o", "m", ["z", "y"]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;List.to_string&lt;/code&gt; , does not transform a list to a string (preserving its structure), &lt;code&gt;List.to_string&lt;/code&gt; flattens a list, take each element and transform it to a UTF-8 code point, and if you try to print that, you will get whatever string those codes points produce&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iex(49)&amp;gt; [232, 137, 178] |&amp;gt; List.to_string |&amp;gt; IO.puts
è²
:ok
iex(50)&amp;gt; [91, 50, 51, 50, 44, 32, 49, 51, 55, 44, 32, 49, 55, 56, 93] |&amp;gt; List.to_string |&amp;gt; IO.puts
[232, 137, 178]
:ok
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In retrospect this is what the docs says &lt;br&gt;


&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://hexdocs.pm/elixir/1.12/List.html#to_string/1" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;hexdocs.pm&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;&lt;br&gt;&lt;br&gt;
but well, the docs wasn't telling what I wanted it to say 😀&lt;/p&gt;

&lt;p&gt;And oh, before I forget, Elixir have the &lt;code&gt;inspect&lt;/code&gt; function, which does exactly was I thought &lt;code&gt;List.to_string&lt;/code&gt; would do&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iex(53)&amp;gt; [232, 137, 178] |&amp;gt; inspect |&amp;gt; IO.puts
[232, 137, 178]
:ok
iex(54)&amp;gt; ["o","m",["z","y"]] |&amp;gt; inspect |&amp;gt; IO.puts
["o", "m", ["z", "y"]]
:ok
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>elixir</category>
      <category>beginners</category>
      <category>code</category>
    </item>
  </channel>
</rss>
