<div dir="ltr"><div dir="ltr"><div dir="ltr"><p style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px;margin-top:0px">Hi all,</p><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">On behalf of the Accelerate team, I'm happy to announce the release of version 1.3 of Accelerate:</p><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><a href="http://hackage.haskell.org/package/accelerate-1.3.0.0" rel="nofollow" style="box-sizing:border-box;color:rgb(3,102,214);text-decoration:none">http://hackage.haskell.org/package/accelerate-1.3.0.0</a></p><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">This release includes many quality-of-life improvements for defining and using your own data types in embedded code. A summary of these new features is included in this release announcement.</p><h3 style="box-sizing:border-box;margin-top:24px;margin-bottom:16px;font-size:1.25em;line-height:1.25;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"">Generic</h3><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">Instances of <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">Elt</code> and <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">Arrays</code> are now derivable via <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">Generic</code> for simple (non-recursive Haskell'98) data types:</p><div class="gmail-highlight gmail-highlight-source-haskell" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px;overflow:visible"><pre style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;margin-top:0px;margin-bottom:0px;word-wrap:normal;padding:16px;overflow:auto;line-height:1.45;background-color:rgb(246,248,250);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px;word-break:normal"><span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">data</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Point</span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">=</span> <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">Point</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)"><span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">Float</span></span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)"><span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">Float</span></span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)"><span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">Float</span></span>
  <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">deriving</span> (<span class="gmail-pl-e" style="box-sizing:border-box;color:rgb(111,66,193)">Generic</span>, <span class="gmail-pl-e" style="box-sizing:border-box;color:rgb(111,66,193)">Elt</span>)</pre></div><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">At the scalar level we now also support <em style="box-sizing:border-box">sum</em> data types:</p><div class="gmail-highlight gmail-highlight-source-haskell" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px;overflow:visible"><pre style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;margin-top:0px;margin-bottom:0px;word-wrap:normal;padding:16px;overflow:auto;line-height:1.45;background-color:rgb(246,248,250);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px;word-break:normal"><span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">data</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Object</span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">=</span> <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">Sphere</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Point</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)"><span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">Float</span></span> | <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">Triangle</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Point</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Point</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Point</span>
  <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">deriving</span> (<span class="gmail-pl-e" style="box-sizing:border-box;color:rgb(111,66,193)">Generic</span>, <span class="gmail-pl-e" style="box-sizing:border-box;color:rgb(111,66,193)">Elt</span>)</pre></div><h3 style="box-sizing:border-box;margin-top:24px;margin-bottom:16px;font-size:1.25em;line-height:1.25;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"">Pattern synonyms</h3><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">Pattern synonyms for creating and accessing data types can now be defined and used, which in practice makes GHC's type checker far less angry than the old method of <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">lift</code> and <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">unlift</code> (which still exists). Pattern synonyms are used in the same way as you would a regular data constructor.</p><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">Included are synonyms for tuples up to 16-tuples (<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">T2</code>, <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">T3</code>...) as well as indices (<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">Z_</code>, <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">::.</code>, <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">I1</code>, <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">I2</code>...) and other standard data types (<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">Just_</code>, <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">True_</code>, etc.)</p><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">Defining your own pattern synonyms for product types can be done via the overloaded <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">Pattern</code> synonym at both the scalar:</p><div class="gmail-highlight gmail-highlight-source-haskell" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px;overflow:visible"><pre style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;margin-top:0px;margin-bottom:0px;word-wrap:normal;padding:16px;overflow:auto;line-height:1.45;background-color:rgb(246,248,250);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px;word-break:normal">pattern <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">Point_</span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">::</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Exp</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)"><span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">Float</span></span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">-></span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Exp</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)"><span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">Float</span></span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">-></span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Exp</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)"><span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">Float</span></span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">-></span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Exp</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Point</span>
pattern <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">Point_</span> x y z <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">=</span> <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">Pattern</span> (x, y, z)</pre></div><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">...and array levels:</p><div class="gmail-highlight gmail-highlight-source-haskell" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px;overflow:visible"><pre style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;margin-top:0px;margin-bottom:0px;word-wrap:normal;padding:16px;overflow:auto;line-height:1.45;background-color:rgb(246,248,250);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px;word-break:normal"><span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">data</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">State</span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">=</span> <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">State</span> (<span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Vector</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Point</span>) (<span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Vector</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)"><span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">Float</span></span>)
  <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">deriving</span> (<span class="gmail-pl-e" style="box-sizing:border-box;color:rgb(111,66,193)">Generic</span>, <span class="gmail-pl-e" style="box-sizing:border-box;color:rgb(111,66,193)">Arrays</span>)

pattern <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">State_</span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">::</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Acc</span> (<span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Vector</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Point</span>) <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">-></span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Acc</span> (<span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Vector</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)"><span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">Float</span></span>) <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">-></span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Acc</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">State</span>
pattern <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">State_</span> { positions, masses } <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">=</span> <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">Pattern</span> (positions, masses)</pre></div><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">Note the syntax of the last example, which also generates the two accessor functions <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">positions :: Acc State -> Acc (Vector Point)</code> and <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">masses :: Acc State -> Acc (Vector Float)</code>. This syntax is of course also available for use in <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">Exp</code> patterns.</p><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">Defining pattern synonyms can also be achieved with the following TemplateHaskell splice (which is required for sum data types):</p><div class="gmail-highlight gmail-highlight-source-haskell" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px;overflow:visible"><pre style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;margin-top:0px;margin-bottom:0px;word-wrap:normal;padding:16px;overflow:auto;line-height:1.45;background-color:rgb(246,248,250);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px;word-break:normal">mkPattern ''Object</pre></div><h3 style="box-sizing:border-box;margin-top:24px;margin-bottom:16px;font-size:1.25em;line-height:1.25;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"">Embedded pattern matching</h3><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">This release also introduces support for <em style="box-sizing:border-box">embedded pattern matching</em> via the new <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px">match</code> operator, which allows us to reuse Haskell's case syntax in embedded code:</p><div class="gmail-highlight gmail-highlight-source-haskell" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px;overflow:visible"><pre style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:11.899999618530273px;margin-top:0px;margin-bottom:0px;word-wrap:normal;padding:16px;overflow:auto;line-height:1.45;background-color:rgb(246,248,250);border-top-left-radius:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-bottom-left-radius:6px;word-break:normal"><span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">intersect</span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">::</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Exp</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Ray</span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">-></span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Exp</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Object</span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">-></span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)">Exp</span> <span class="gmail-pl-en" style="box-sizing:border-box;color:rgb(111,66,193)"><span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">Bool</span></span>
intersect ray <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">=</span> match <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">\</span><span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">case</span>
  <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">Sphere_</span> c r     <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">-></span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">...</span>
  <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">Triangle_</span> a b c <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">-></span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">...</span></pre></div><h3 style="box-sizing:border-box;margin-top:24px;margin-bottom:16px;font-size:1.25em;line-height:1.25;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"">Packages</h3><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">This release consists of the following packages:</p><ul style="box-sizing:border-box;padding-left:2em;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><li style="box-sizing:border-box">accelerate-1.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-llvm-1.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-llvm-native-1.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-llvm-ptx-1.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-fft-1.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-examples-1.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-blas-0.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-bignum-0.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-io-1.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-io-array-0.1.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-io-bmp-0.1.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-io-bytestring-0.1.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-io-cereal-0.1.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-io-JuicyPixels-0.1.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-io-repa-0.1.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">accelerate-io-vector-0.1.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">colour-accelerate-0.4.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">containers-accelerate-0.1.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">hashable-accelerate-0.1.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">gloss-accelerate-2.1.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">gloss-raster-accelerate-2.1.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">lens-accelerate-0.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">linear-accelerate-0.7.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">mwc-random-accelerate-0.2.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">cuda-0.10.2.0</li><li style="box-sizing:border-box;margin-top:0.25em">cufft-0.10.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">cublas-0.6.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">cusparse-0.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">cusolver-0.3.0.0</li><li style="box-sizing:border-box;margin-top:0.25em">nvvm-0.10.0.0</li></ul><h3 style="box-sizing:border-box;margin-top:24px;margin-bottom:16px;font-size:1.25em;line-height:1.25;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"">Contributors</h3><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">Special thanks to those who contributed to this release:</p><ul style="box-sizing:border-box;padding-left:2em;margin-top:0px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px;margin-bottom:0px"><li style="box-sizing:border-box">Trevor L. McDonell (<a class="gmail-user-mention" href="https://github.com/tmcdonell" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@tmcdonell</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Joshua Meredith (<a class="gmail-user-mention" href="https://github.com/JoshMeredith" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@JoshMeredith</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Ivo Gabe de Wolff (<a class="gmail-user-mention" href="https://github.com/ivogabe" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@ivogabe</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">David van Balen (<a class="gmail-user-mention" href="https://github.com/dpvanbalen" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@dpvanbalen</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Jaro Reinders (<a class="gmail-user-mention" href="https://github.com/noughtmare" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@noughtmare</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Alex Lang (<a class="gmail-user-mention" href="https://github.com/alang9" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@alang9</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Paul Wilson (<a class="gmail-user-mention" href="https://github.com/statusfailed" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@statusfailed</a>)</li><li style="box-sizing:border-box;margin-top:0.25em"><a class="gmail-user-mention" href="https://github.com/lennonhill" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@lennonhill</a></li><li style="box-sizing:border-box;margin-top:0.25em">Travis Whitaker (<a class="gmail-user-mention" href="https://github.com/TravisWhitaker" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@TravisWhitaker</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Roger Bosman (<a class="gmail-user-mention" href="https://github.com/rogerbosman" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@rogerbosman</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Robbert van der Helm (<a class="gmail-user-mention" href="https://github.com/robbert-vdh" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@robbert-vdh</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Sam (<a class="gmail-user-mention" href="https://github.com/sam-340453" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@sam-340453</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Lars van den Haak (<a class="gmail-user-mention" href="https://github.com/sakehl" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@sakehl</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Rinat Striungis (<a class="gmail-user-mention" href="https://github.com/Haskell-mouse" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@Haskell-mouse</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Viktor Kronvall (<a class="gmail-user-mention" href="https://github.com/considerate" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@considerate</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Tom Smeding (<a class="gmail-user-mention" href="https://github.com/tomsmeding" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@tomsmeding</a>)</li><li style="box-sizing:border-box;margin-top:0.25em">Ryan Scott (<a class="gmail-user-mention" href="https://github.com/RyanGlScott" style="box-sizing:border-box;color:rgb(36,41,46);text-decoration:none;font-weight:600;white-space:nowrap">@RyanGlScott</a>)</li></ul><div><font color="#24292e" face="-apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji"><span style="font-size:14px"><br></span></font></div></div></div></div>