Re: functional IO in a SHA1 implementation

Henry Cejtin <[email protected]> Wed, 6 Feb 2019 21:45:19 -0600
Newsgroups gmane.comp.lang.ml.mlton.user
Message-ID <CAPKXxCpaZDrqzN+JNgNdfnFfa9jvGw1iRqU5RXLee_2Tf8R3UQ@mail.gmail.com>
SXQgaXMgZGVmaW5pdGVseSBhbm5veWluZyBmb3IgdGhlIHVuZGVybHlpbmcgeHh4SU8uaW5zdHJl
YW0gdG8gaG9sZCBvbgp0byBzdHVmZiB3aGVuIHlvdSBhcmUgdXNpbmcgdGhlIHh4eElPLlN0cmVh
bUlPLmluc3RyZWFtIGZvciBhIHdoaWxlLgpPbmUgdGhpbmcgdGhhdCBJIG9mdGVuIGRvIGlzIHRv
IGNyZWF0ZSBhbiBlbXB0eSAoL2Rldi9udWxsLWxpa2UpCnh4eElPLlN0cmVhbUlPLmluc3RyZWFt
LCBhbmQgd2hlbiBJIGdldCBpdAoodmlhIHh4eElPLmdldEluc3RyZWFtKSwgaW1tZWRpYXRlbHkg
YWZ0ZXJ3b3JkcyB1c2UgeHh4SU8uc2V0SW5zdHJlYW0KdG8gdGhlIGVtcHR5IG9uZS4KVGhlbiwg
d2hlbiBJIGFtIGZpbmlzaGVkIHVzaW5nIHRoZSBmdW5jdGlvbmFsIHN0cmVhbSwgSSB1c2UKeHh4
SU8uc2V0SW5zdHJlYW0gdG8gc3Rhc2ggaXQgYmFjayBpbiB0aGUgaW1wZXJhdGl2ZSBzdHJlYW0u
CgpUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGluIHZlcnNpb25zIG9mIE1MIHRoYXQgaGF2
ZSBhbiBpbnRlcmFjdGl2ZQp0b3AtbGV2ZWwsIG9yIHdoaWNoIGFyZSBub3Qgc2FmZS1mb3Itc3Bh
Y2UuCkZvciB0aGVtLCBldmVuIGlmIHlvdSBuZXZlciByZWZlciB0byB0aGUgaW1wZXJhdGl2ZSBz
dHJlYW0gYWdhaW4sCml0IHdpbGwgcHJvYmFibHkga2VlcCBpdCBhbGl2ZSBzaW5jZSBpdCBpcyBi
b3VuZCBhdCB0aGUgdG9wLWxldmVsLgoKT24gV2VkLCBGZWIgNiwgMjAxOSBhdCA0OjA2IFBNIDxN
aWNoYWVsLk5vcnJpc2hAZGF0YTYxLmNzaXJvLmF1PiB3cm90ZToKPgo+IEkgYW0gdXNpbmcgaW5w
dXROLCBhbmQgdGhlIHNwZWVkIGlzIG5vdCBzbyBiYWQsIGJ1dCB0aGUgZXhjZXNzaXZlIG1lbW9y
eSB1c2FnZSBtdXN0IGp1c3QgYmUgYmVjYXVzZSB0aGUgZHJpdmVyIGlzIGluZGVlZCBob2xkaW5n
IG9udG8gdGhhdCBvbGQgdmFsdWUgb2YgdGhlIGlucHV0IHN0cmVhbSwgYXMgTWF0dGhldyBkaWFn
bm9zZWQuCj4KPiBJIHdpbGwgaW5kZWVkIGp1c3Qgc2hlbGwgb3V0IHRvIHNoYXN1bSBhcyBteSBk
ZWZhdWx0IGltcGxlbWVudGF0aW9uLgo+Cj4gTWljaGFlbAo+Cj4g77u/T24gNy8yLzE5LCAwMTo0
NCwgIkpvaG4gUmVwcHkiIDxqaHJAY3MudWNoaWNhZ28uZWR1PiB3cm90ZToKPgo+ICAgICA+IERh
dGU6IFdlZCwgNiBGZWIgMjAxOSAwMDozOTowOSArMDAwMAo+ICAgICA+IEZyb206IDxNaWNoYWVs
Lk5vcnJpc2hAZGF0YTYxLmNzaXJvLmF1Pgo+ICAgICA+IFRvOiA8bWx0b24tdXNlckBtbHRvbi5v
cmc+Cj4gICAgID4gU3ViamVjdDogW01MdG9uLXVzZXJdIGZ1bmN0aW9uYWwgSU8gaW4gYSBTSEEx
IGltcGxlbWVudGF0aW9uCj4gICAgID4gTWVzc2FnZS1JRDogPDg0MjU2NjcyLTJCNTQtNDY3RS04
ODFFLTk4ODgzMEE1MUI0QUBkYXRhNjEuY3Npcm8uYXU+Cj4gICAgID4gQ29udGVudC1UeXBlOiB0
ZXh0L3BsYWluOyBjaGFyc2V0PSJVVEYtOCIKPiAgICAgPgo+ICAgICA+IFRoZXJlIG1heSBiZSBi
ZXR0ZXIgaW1wbGVtZW50YXRpb25zIG91dCB0aGVyZSwgYnV0IGxvb2tpbmcgZm9yIGEgU0hBMSBp
biBTTUwsIEkgZm91bmQKPiAgICAgPgo+ICAgICA+ICBnaXRAZ2l0aHViLmNvbTpzcmRxdHkvc21s
LXNoYTEuZ2l0Pwo+ICAgICA+Cj4gICAgID4gSXQgY29tcGlsZXMgYW5kIHJ1bnMgYW5kIGdpdmVz
IGNvcnJlY3QgYW5zd2VycyBvbiBhdCBsZWFzdCB0d28gaW5wdXRzICgKPiAgICAgPiBJdCBhbHNv
IGhhcyBhIG5pY2UgZ2VuZXJpYyBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgZm9yIHJlYWRpbmcgY2h1
bmtzIG9mIGZpbGVzIGF0IGEgdGltZSwgZXRjLgo+ICAgICA+Cj4gICAgID4gSG93ZXZlciwgdGhl
IGludGVyZmFjZSBpcwo+ICAgICA+Cj4gICAgID4gICAgdHlwZSAnYSBieXRlX3JlYWRlciA9ICdh
ICogaW50IC0+IFdvcmQ4VmVjdG9yLnZlY3RvciAqICdhCj4gICAgID4gICAgdmFsIHNoYTEgOiAn
YSBieXRlX3JlYWRlciAtPiAnYSAtPiBXb3JkOFZlY3Rvci52ZWN0b3IKPiAgICAgPgo+ICAgICA+
IGFuZCB0aGUgcmVhbGlzYXRpb24gb2YgdGhpcyBieXRlX3JlYWRlciBpbiB0aGUgc3VwcGxpZWQg
c2hhMS1maWxlIGV4YW1wbGUgaXMgQmluSU8uU3RyZWFtSU8uaW5wdXROLgo+ICAgICA+Cj4gICAg
ID4gSXQgZG9lc24ndCBsb29rIGFzIGlmIHRoZSBzb3VyY2VzIGFyZSBob2xkaW5nIG9udG8gb2xk
IHN0YXRlcywgYnV0LCB1bmZvcnR1bmF0ZWx5LCB3aGVuIEkgcnVuIHNoYTEtZmlsZSBvbiBhIDEu
MkdCIGZpbGUsIHRoZSBydW5uaW5nIHByb2Nlc3MgdGFrZXMgbXVjaCBsb25nZXIgdGhhbiB0aGUg
YnVpbHQtaW4gc2hhc3VtIGFuZCBpdCBldmVudHVhbGx5IGNvbWVzIHRvIGNvbnN1bWUgYWJvdXQg
Mi41R0Igb2YgbWVtb3J5IChhcyBleWViYWxsZWQgaW4gT1NYJ3MgcHJvY2VzcyBtb25pdG9yIGFw
cCkuCj4gICAgID4KPiAgICAgPiBJcyB0aGlzIGluZXZpdGFibGU/ICBTaG91bGQgSSByZXdyaXRl
IHRvIG1ha2UgdGhlIGludGVyZmFjZSBpbXBsaWNpdGx5IHN0YXRlZnVsIGJ5IGp1c3QgaGF2aW5n
IHRoZSBieXRlX3JlYWRlciB0eXBlIGJlCj4gICAgID4KPiAgICAgPiAgIGludCAtPiBXb3JkOFZl
Y3Rvci52ZWN0b3IKPiAgICAgPgo+ICAgICA+ID8KPiAgICAgPgo+ICAgICA+IE1pY2hhZWwKPgo+
ICAgICBUaGUgaW1wZXJhdGl2ZSBJL08gKGkuZS4sIFRleHRJTyAmIEJpbklPKSBvcGVyYXRpb25z
IGFyZSBqdXN0IGxheWVyZWQgb24gdG9wIG9mIHRoZQo+ICAgICBmdW5jdGlvbmFsIHN0cmVhbSBv
cGVyYXRpb25zLCBzbyB0aGUgZnVuY3Rpb25hbCBsYXllciBzaG91bGQgYmUgc2xpZ2h0bHkgZmFz
dGVyLgo+ICAgICBNb3JlIHNpZ25pZmljYW50IGlzIHRoZSBncmFudWxhcml0eSBvZiBJL08gb3Bl
cmF0aW9ucy4gIFRoZSBiZXN0IEkvTyBwZXJmb3JtYW5jZQo+ICAgICB3aWxsIGNvbWUgZnJvbSBk
b2luZyBJL08gaW4gY2h1bmtzIChlLmcuLCB1c2luZyB0aGUgaW5wdXQvaW5wdXROL2lucHV0QWxs
IGZ1bmN0aW9ucykuCj4gICAgIElmIHRoZSBieXRlX3JlYWRlciB0eXBlIGlzIGRvaW5nIGlucHV0
IGEgYnl0ZSBhdCBhIHRpbWUgKHVzaW5nIGlucHV0MSksIHRoZXJlIHdpbGwKPiAgICAgYmUgYSBs
b3QgbW9yZSBvdmVyaGVhZC4KPgo+ICAgICAgICAgLSBKb2huCj4KPgo+Cj4gICAgIF9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gICAgIE1MdG9uLXVzZXIg
bWFpbGluZyBsaXN0Cj4gICAgIE1MdG9uLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0OyBtbHRv
bi11c2VyQG1sdG9uLm9yZwo+ICAgICBodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0
cy9saXN0aW5mby9tbHRvbi11c2VyCj4KPgo+IC0tCj4gWW91IHJlY2VpdmVkIHRoaXMgbWVzc2Fn
ZSBiZWNhdXNlIHlvdSBhcmUgc3Vic2NyaWJlZCB0byB0aGUgR29vZ2xlIEdyb3VwcyAiTUx0b24t
dXNlciIgZ3JvdXAuCj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGdyb3VwIGFuZCBzdG9wIHJl
Y2VpdmluZyBlbWFpbHMgZnJvbSBpdCwgc2VuZCBhbiBlbWFpbCB0byBtbHRvbi11c2VyK3Vuc3Vi
c2NyaWJlQG1sdG9uLm9yZy4KPgo+Cj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwo+IE1MdG9uLXVzZXIgbWFpbGluZyBsaXN0Cj4gTUx0b24tdXNlckBs
aXN0cy5zb3VyY2Vmb3JnZS5uZXQ7IG1sdG9uLXVzZXJAbWx0b24ub3JnCj4gaHR0cHM6Ly9saXN0
cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vbWx0b24tdXNlcgoKLS0gCllvdSByZWNl
aXZlZCB0aGlzIG1lc3NhZ2UgYmVjYXVzZSB5b3UgYXJlIHN1YnNjcmliZWQgdG8gdGhlIEdvb2ds
ZSBHcm91cHMgIk1MdG9uLXVzZXIiIGdyb3VwLgpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgZ3Jv
dXAgYW5kIHN0b3AgcmVjZWl2aW5nIGVtYWlscyBmcm9tIGl0LCBzZW5kIGFuIGVtYWlsIHRvIG1s
dG9uLXVzZXIrdW5zdWJzY3JpYmVAbWx0b24ub3JnLgoKCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNTHRvbi11c2VyIG1haWxpbmcgbGlzdApNTHRvbi11
c2VyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldDsgbWx0b24tdXNlckBtbHRvbi5vcmcKaHR0cHM6Ly9s
aXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vbWx0b24tdXNlcgo=